Python:连接不同列表之间的子列表

时间:2016-01-05 22:33:59

标签: python list loops concatenation list-comprehension

我有两个相同长度的列表列表,如下所示:

lstA = [[1,4,5,6],[4,5],[5,6],[],[],[],[],[]]
lstB = [[7,8],[4,5],[],[],[],[2,7,8],[7,8],[6,7]]

我希望在每个索引位置连接子列表,以便它们创建一个子列表,如下所示:

 newlst = [[1,4,5,6,7,8],[4,5],[5,6],[],[],[2,7,8],[7,8],[6,7]]

理想情况下,新的子列表将删除重复项(如newlst [1]中)。我将整数转换为字符串,并试图这样做:

for i in range(len(lstA)):
    c = [item + item for item in strA[i], strB[i]]

但是在添加到其他列表之前,会将每个列表中的每个项目添加到自身,从而产生如下内容:

failedlst = [[["1","4","5","6","1","4","5","6"],["7","8","7","8"]],[["4","5","4","5"],["4","5","4","5"]]...etc]

这仍然没有实际加入这两个子列表,只是创建了两个子列表的新子列表。任何帮助都会受到很大的限制!

3 个答案:

答案 0 :(得分:5)

通过将list comprehensionzip函数结合使用,并行连接项目来制作列表非常简单。

newlst = [x+y for x,y in zip(lstA, lstB)]

如果要删除重复项,可以使用set。如果您想在列表中按顺序放回项目,可以使用sorted

结合使用:

newlst = [sorted(set(x+y)) for x,y in zip(lstA, lstB)]

答案 1 :(得分:1)

您可以使用:

lstA = [[1,4,5,6],[4,5],[5,6],[],[],[],[],[]]
lstB = [[7,8],[4,5],[],[],[],[2,7,8],[7,8],[6,7]]

answer = []
for idx in range(len(lstA)):
    answer.append(sorted(list(set(lstA[idx]+lstB[idx]))))

print(answer)

<强>输出

[[1, 4, 5, 6, 7, 8], [4, 5], [5, 6], [], [], [2, 7, 8], [7, 8], [6, 7]]

答案 2 :(得分:0)

使用zip模块中的chain.from_iterableitertools

In [94]: from itertools import chain

In [95]: lstA = [[1,4,5,6],[4,5],[5,6],[],[],[],[],[]]

In [96]: lstB = [[7,8],[4,5],[],[],[],[2,7,8],[7,8],[6,7]]

In [97]: [list(set(chain.from_iterable(item))) for item in zip(lstA, lstB)]
Out[97]: [[1, 4, 5, 6, 7, 8], [4, 5], [5, 6], [], [], [8, 2, 7], [8, 7], [6, 7]]

如果您想对子列表进行排序,那么:

In [98]: [sorted(set(chain.from_iterable(item))) for item in zip(lstA, lstB)]
Out[98]: [[1, 4, 5, 6, 7, 8], [4, 4, 5, 5], [5, 6], [], [], [2, 7, 8], [7, 8], [6, 7]]