2016-09-06 4 views
0

두 목록 목록이 있습니다.Python : 목록의 두 목록에 일치 목록

listInA = [id, a1, a2, a3] 

두 번째는 먼저 ID로, 유사 형식의리스트로 구성되어 있습니다 : 첫 번째는 다음과 같은 형식의리스트로 구성되어 어느 목록이 정렬됩니다

listInB = [id, b1, b2, b3] 

, 그들은 동일한 길이의 수 없습니다 . 각각의 형식 목록과 함께 목록 목록을 만드는 가장 좋은 방법은 무엇입니까?

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

여기서 id는 두 목록간에 일치합니까? 감사!

답변

3

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'] 
] 
0

리스트가 정렬되지와 동일한 길이의 문제에 대한 효율적인 솔루션으로 올라오고의 어려움을 증가하지 않은 사실. 그러나 결국 효과가있는 빠르고 더러운 솔루션은 여전히 ​​실현 가능합니다.

ID가 두 목록 중 첫 번째 것으로 보입니다. 이 경우, aA 인 각 목록에 대해 a의 첫 번째 요소를 가져올 수 있으며 목록 bB으로 확인할 수 있습니다. 첫 번째 요소가 일치하면 나머지 요소 인 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에 대한 큰 목록 크기를 다루는,이 솔루션의 효율 abysmally 떨어질 것이다, 그러나 그것은 합리적인 크기의 목록에 대한 작동합니다.

관련 문제