2012-09-02 139 views
1

之間的完全區別我有兩個列表:Python的 - 兩個列表長度相同

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

,我想comlete差異。 所以我想要這樣的輸出: ['','','','','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

你舉的例子是錯誤的,'「Homeland''和'」 Homelnad''是不同的。您還遺漏了代碼中的'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

相關問題