2012-09-02 140 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

相关问题