2016-09-06 7 views
0

リストのリストは2つあります。Python:リストの2つのリストに一致するリスト

listInA = [id, a1, a2, a3] 

秒が最初のIDと、同様にフォーマットされたリストから構成されている:第一は、次のようにフォーマットされたリストで構成されているいずれのリストがソートされ

listInB = [id, b1, b2, b3] 

、それらは等しい長さではありません。

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

ここで、両方のリストの間でIDが一致しているリストのリストを作成する最良の方法は何ですか。ありがとう!

答えて

3

IDからリストへのリストの2番目のリストから、辞書の補完を使用して辞書を作成できます。その後、リストの補完を使用して新しいリストを作成し、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'] 
] 
0

リストがソートされていないと同じ長さではないされているという事実は、問題への効率的な解決策を考え出すことの難しさを増します。しかし、最終的にはうまくいく、迅速で汚れた解決策は、確実に実現可能です。

IDは両方のリストの最初のようです。この場合、リストaAになり、最初の要素はaになり、リストbBになります。最初の要素が一致する場合、残りの要素(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 

ABのための大規模なリストのサイズを扱う、このソリューションの効率はabysmallyドロップだろうが、それは合理的なサイズのリストのために働く必要があります。

関連する問題