Python:两个列表中的匹配列表

2024-05-17 13:13:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张单子。第一个由以下格式的列表组成:

listInA = [id, a1, a2, a3]

第二个由格式类似的列表组成,id为第一个:

listInB = [id, b1, b2, b3]

两个列表都没有排序,而且它们的长度也不相等。制作列表的最佳方法是什么,每个列表的格式如下:

listInC = [id, a1, a2, a3, b1, b2, b3]

两个列表之间的id匹配的位置?谢谢!你知道吗


Tags: 方法ida2列表排序a1格式b2
2条回答

您可以使用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。如果第一个元素匹配,那么我们可以创建一个包含ab的剩余元素的列表,并将其附加到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

当处理AB的大列表大小时,此解决方案的效率将大幅下降,但它应该适用于大小合理的列表。你知道吗

相关问题 更多 >