2017-03-27 1 views
2

나는 약 1.6 백만 품목의 길이를 가진 두 개의 목록을 가지고 있습니다. 각 항목은 비어 있거나 하나 이상의 문자열이 포함 된 목록이 포함되어 있습니다. 불행히도 목록 중 하나에 데이터가 누락되어 두 데이터가 일치하지 않습니다. 이 목록의 내용을 플랫 데이터 프레임에 쓰고 싶지만 배열 길이가 다른 경우에는 사용할 수 없습니다.두 파이썬 목록에 같은 양의 요소가 있는지 확인하는 방법은 무엇입니까?

나는 항목이 다른 목록에서 다른 길이를 갖는 것을 발견했을 때 목록 중 하나에 NA를 포함시키는 for-loop를 이미 시도했지만 그 접근법은 160 만 개 항목을 반복합니다.

for-loop 방식이 아닌보다 빠르고 우아한 방법이 있습니다. 모든 일을 그대로 두는 데는 약 6 시간이 걸립니다.

편집 : 여기에 내가 무엇을 의미하는지의 예입니다

list_A = [[''],[''],[''],['a'],['a','b','c'],[''],['d']] 
list_B = [[''],[''],[''],['a'],[''],[''],['']] 

내가 원하는 것은 list_B에 빈 목록에서의 NA를 배치하는 것입니다은 list_B는 다음과 같다 것이라고 :

list_A = [[''],[''],[''],['a'],['a','b','c'],[''],['d']] 
list_B = [[''],[''],[''],['a'],['NA','NA','NA'],[''],['NA']] 
+0

numpy.array.size는 충분히 빠릅니다. – kilojoules

+0

이 질문은 numpy와 관련이 있습니까? 그렇다면 태그를 지정하십시오. – idjaw

+0

@ idjaw 잘 모르겠습니다 만 도움이 될 수 있도록 태그를 추가했습니다. – StanO

답변

4

귀하의 예에서 해당 항목은 동일하거나 list_B에있는 항목을 에있는 항목과 동일한 길이의 NA 목록으로 대체해야합니다. 이 생성기 표현식은 충분히 빠릅니다 :

(a if a==b else len(a)*['NA'] for a,b in zip(list_A,list_B)) 
+0

그건 정확히 그것과 완벽하게 내 예제 문제를 해결! 방금 ​​모범을 잘못 만든 것으로 나타났습니다. list_B는 글자 대신 숫자 여야 했으므로 (즉, 다른 것). 그래서 내가 찾고 있던 것은 코드를 약간 수정 한 것입니다.이 코드는 다른 사람들을 도울 수 있기 때문에 여기에 넣을 것입니다 : (b len (a) == len (b) 그렇지 않으면 len (a) * [ 'NA'] a, b는 zip (list_A, list_B)) – StanO

관련 문제