2024-05-17 13:13:19 发布
网友
我有两张单子。第一个由以下格式的列表组成:
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'] ]
列表没有排序,而且长度也不相等,这一事实增加了找到有效解决问题的方法的难度。然而,一个快速而肮脏的解决方案最终还是可行的。你知道吗
ID似乎是两个列表中的第一个。既然是这样,那么对于A中的每个列表a,我们可以得到a的第一个元素并检查B中的列表b。如果第一个元素匹配,那么我们可以创建一个包含a和b的剩余元素的列表,并将其附加到C。总之。。。你知道吗
A
a
B
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的大列表大小时,此解决方案的效率将大幅下降,但它应该适用于大小合理的列表。你知道吗
您可以使用dict comprehension从ID到list的第二个列表创建字典。然后,使用列表理解创建新的列表,并基于id附加列表。你知道吗
输出:
列表没有排序,而且长度也不相等,这一事实增加了找到有效解决问题的方法的难度。然而,一个快速而肮脏的解决方案最终还是可行的。你知道吗
ID似乎是两个列表中的第一个。既然是这样,那么对于
A
中的每个列表a
,我们可以得到a
的第一个元素并检查B
中的列表b
。如果第一个元素匹配,那么我们可以创建一个包含a
和b
的剩余元素的列表,并将其附加到C
。总之。。。你知道吗当处理
A
和B
的大列表大小时,此解决方案的效率将大幅下降,但它应该适用于大小合理的列表。你知道吗相关问题 更多 >
编程相关推荐