2012-09-02 3 views
1

사이의 완전한 차이가 나는 두 개의 목록이 있습니다파이썬 두 목록 같은 길이

a = ['Peter', '1982', '2000', 'Homeland', '10.34'] 
b = ['Peter', '1982', '2000', 'Homelnad', '10.32'] 

을 나는 comlete DIFF를 원한다. 그래서 나는 다음과 같은 출력을 원합니다. [ '', '', '', '10 .32 '] 올바른 값으로 변경된 값만 원합니다.

일부 기능이 내장되어 있습니까? 가장 빠른 방법은 무엇입니까? 이것을 "수동으로"해야합니까?

i = 0 
new_list = [] 
for item in a: 
    if item != b[i]: 
     new_row.append(item) 
    else: 
     new_row.append('') 
    i += 1 
    new_list.append(new_row) 
+2

귀하의 예를 잘못은'Homelnad'' 'Homeland''과'다릅니다. 또한 코드에서'new_row'에 대한 정의를 놓쳤습니다. – jamylak

+1

'b'가 빈 문자열로 변경되면 어떻게 될까요? – Hamish

+0

예, "Homelnad"라는 단어에 오류가있어서 무시하십시오. 내 프로젝트에서 빈 값을 사용할 수 없으므로이를 "변경되지 않은 값"으로 사용할 수 있습니다. – Viliam

답변

5

나는 내장이 있다고 생각하지 않지만, 여기에 짧은 "수동"방법이있다 :

In [1]: a = ['Peter', '1982', '2000', 'Homeland', '10.34'] 

In [2]: b = ['Peter', '1982', '2000', 'Homelnad', '10.32'] 

In [3]: [be if ae != be else '' for ae, be in zip(a, b)] 
Out[3]: ['', '', '', 'Homelnad', '10.32'] 
+0

'itertools'의'izip'은 어떻습니까? – vivek

+0

@vivek 메모리를 절약 할 수는 있지만 코드는 Python 3에서 작동하지 않습니다. Py3에서'zip'는 Py2.x에서'itertools.izip'처럼 동작합니다. –

+0

고마워요, 내가 원하는 것을 정확하게 해줍니다. – Viliam