我有两个列表列表。第一个由格式如下的列表组成:
listInA = [id, a1, a2, a3]
第二个由类似格式的列表组成,其中id为:
listInB = [id, b1, b2, b3]
两个列表都没有排序,它们的长度不相同。制作列表列表的最佳方法是什么,每个列表都包含以下格式:
listInC = [id, a1, a2, a3, b1, b2, b3]
两个列表之间的id匹配?谢谢!
答案 0 :(得分:3)
您可以使用dict comprehension从ID到列表的第二个列表列表创建字典。然后,使用列表推导创建新列表,根据ID附加列表。
listA = [
[1, 'a', 'b', 'c'],
[2, 'd', 'e', 'f'],
]
listB = [
[2, 'u', 'v', 'w'],
[1, 'x', 'y', 'z'],
]
b_map = {b[0]: b for b in listB}
print([a + b_map[a[0]][1:] for a in listA])
<强>输出:强>
[
[1, 'a', 'b', 'c', 'x', 'y', 'z'],
[2, 'd', 'e', 'f', 'u', 'v', 'w']
]
答案 1 :(得分:0)
列表未排序且长度不等的事实增加了提出有效解决问题的难度。然而,最终可行的快速而肮脏的解决方案仍然是可行的。
ID似乎是两个列表中的第一个。既然如此,那么对于a
中的每个列表A
,我们都可以获得a
的第一个元素并检查b
中的列表B
。如果第一个元素匹配,那么我们可以创建一个列表,其中包含a
和b
的其余元素,并将其附加到C
。简而言之......
def foo(A, B):
C = []
for a in A:
aID = a[0]
for b in B:
if aID == b[0]:
c = [aID, a[1], a[2], a[3], b[1], b[2], b[3]]
C.append(c)
return C
在处理A
和B
的大型列表大小时,此解决方案的效率会大幅下降,但它应适用于合理大小的列表。