我有两个相同长度的列表列表,如下所示:
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]
这仍然没有实际加入这两个子列表,只是创建了两个子列表的新子列表。任何帮助都会受到很大的限制!
答案 0 :(得分:5)
通过将list comprehension与zip
函数结合使用,并行连接项目来制作列表非常简单。
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_iterable
和itertools
。
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]]