Python:两个列表中的匹配列表
我有两张名单。第一个由以下格式的列表组成:Python:两个列表中的匹配列表,python,join,list,Python,Join,List,我有两张名单。第一个由以下格式的列表组成: listInA = [id, a1, a2, a3] 第二个由格式类似的列表组成,id第一: listInB = [id, b1, b2, b3] 两个列表都没有排序,而且它们的长度也不相等。制作列表的最佳方法是什么,每个列表的格式如下: listInC = [id, a1, a2, a3, b1, b2, b3] 两个列表之间的id是否匹配?谢谢 您可以使用dict comprehension从ID到list的第二个列表创建字典。然后,使用列表
listInA = [id, a1, a2, a3]
第二个由格式类似的列表组成,id第一:
listInB = [id, b1, b2, b3]
两个列表都没有排序,而且它们的长度也不相等。制作列表的最佳方法是什么,每个列表的格式如下:
listInC = [id, a1, a2, a3, b1, b2, b3]
两个列表之间的id是否匹配?谢谢 您可以使用dict comprehension从ID到list的第二个列表创建字典。然后,使用列表理解创建新列表,根据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']
]
您可以使用dict comprehension从第二个列表ID到list创建字典。然后,使用列表理解创建新列表,根据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']
]
列表未排序且长度不相等的事实增加了找到有效解决问题的方法的难度。然而,一个最终有效的快速而肮脏的解决方案肯定仍然是可行的 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
的大列表时,此解决方案的效率将大大降低,但它应该适用于大小合理的列表。列表未排序且长度不相等的事实增加了找到有效解决问题的难度。然而,一个最终有效的快速而肮脏的解决方案肯定仍然是可行的
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
的大列表大小时,此解决方案的效率将大大降低,但它应该适用于大小合理的列表