【问题标题】:Efficient way to splice together two lists of lists in python在python中将两个列表拼接在一起的有效方法
【发布时间】:2017-09-19 20:56:12
【问题描述】:

我在 python 中有两个嵌套列表,例如:

lst1 = [
       [ [1,2],[3,4] ], [ [5,6,7],[8,9,10] ]
       ]
lst2 = [
       [ [11,12],[13,14] ], [ [15,16,17],[18,19,20] ]
       ]

我希望能够放入与列表的扁平版本相对应的索引,并返回“交叉”列表:

例如index 为 5,输出为新列表

lst3 = [
       [ [1,2],[3,4] ], [ [5,16,17],[18,19,20] ]
       ]

我可以通过执行三重嵌套循环来做到这一点,但我知道在 python 中必须有更快的方法,可能使用迭代器?

编辑:我在问如何更有效地执行以下操作:

lst1 = [
       [ [1,2],[3,4] ], [ [5,6,7],[8,9,10] ]
       ]
lst2 = [
       [ [11,12],[13,14] ], [ [15,16,17],[18,19,20] ]
       ]


lst3 = []

counter = 0
for i in xrange(len(lst1)):
    for j in xrange(len(lst1[i])):
        temp1 = []
        for k in xrange(len(lst1[i][j])):
            temp2 = []
            counter += 1
            if counter > 5:
                temp2.append(lst2[i][j][k])
            else:
                temp2.append(lst1[i][j][k])
            temp1.append(temp2)
        lst3.append(temp1)

print lst1
print lst2
print lst3

lst3 结果:

[[[1], [2]], [[3], [4]], [[5], [16], [17]], [[18], [19], [20]]]

【问题讨论】:

  • 您将不得不解释输入与输出的对应关系。
  • 通过the Tutorial 了解可用的工具。可以先用你的自然语言在纸上写下完成任务所需的步骤。试着把它变成伪代码,最后变成实际代码。如果您对实际代码感到困惑,请回来询问。请阅读How to Askminimal reproducible example

标签: python iterator nested-lists


【解决方案1】:

我不确定您所说的“交叉”列表是什么意思,但您似乎正在尝试对列表进行某种regex。但是您还提到您想要一个 扁平化 列表,即使您的输出没有扁平化。

所以,我不确定您要的是什么。但是,如果我使用标题来猜测您要查找的内容,那么答案相当简单,使用list comprehension

>>> lst3 = [x for x in [lst1, lst2]]

这将给出以下结果:

>>> lst3
[[[[1, 2], [3, 4]], [[5, 6, 7], [8, 9, 10]]], [[[11, 12], [13, 14]], [[15, 16, 17], [18, 19, 20]]]]

这是两个列表的组合。不确定它是否是您想要的方式的“组合”,因为可以以多种方式解释它,我无法准确说出您想要什么。

【讨论】:

  • 列表理解是多余的; [lst1, lst2] 已经生成了相同的列表。
  • 真的。这是多余的。我以这种方式提交了它,因为它似乎 OP 想要用它做更多的事情,例如过滤掉其中一个列表。一旦已经在列表理解中,这会更容易。
猜你喜欢
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2021-08-26
  • 2015-05-03
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多