我有兩個列表。第一是由格式化列表如下:Python:兩個列表中的匹配列表
listInA = [id, a1, a2, a3]
第二組成類似格式的列表,與該ID第一:
listInB = [id, b1, b2, b3]
既不列表進行排序,並且它們是相等長度的不。是什麼力量讓一個列表的列表的最佳方式,用格式的每一個列表:
listInC = [id, a1, a2, a3, b1, b2, b3]
,其中ID是兩個列表之間是否匹配?謝謝!
我有兩個列表。第一是由格式化列表如下:Python:兩個列表中的匹配列表
listInA = [id, a1, a2, a3]
第二組成類似格式的列表,與該ID第一:
listInB = [id, b1, b2, b3]
既不列表進行排序,並且它們是相等長度的不。是什麼力量讓一個列表的列表的最佳方式,用格式的每一個列表:
listInC = [id, a1, a2, a3, b1, b2, b3]
,其中ID是兩個列表之間是否匹配?謝謝!
您可以使用詞典理解從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']
]
該列表不排序,並且不相等的長度增加想出一種有效的解決問題的難度的事實。然而,一個快速而骯髒的解決方案最終還是可行的。
ID似乎是兩個列表中的第一個。既然是這樣的話,那麼對於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
處理,該解決方案的效率會下降得可憐,但是它應該合理規模的名單運作。