不使用循环从两个列表中删除重复?

时间:2014-10-29 07:32:50

标签: python list

我有两个清单:

a=['1','2','3','3','3']
b=['a','b','c','d','e']

这两个列表具有相同数量的项目。我想删除a和for中具有相同索引的副本。对于这个例子,我想将结果作为

a=['1','2','3']
b=['a','b','c']

我对Python不太熟悉,我认为唯一的方法是使用循环

for item in a
   if find duplicate
   delete b with same index

我想问一下,除了使用循环之外,还有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用set

>>> seen = set()
>>> new_a, new_b = [], []
>>> for x, y in zip(a, b):
...     if x not in seen:
...         new_a.append(x)
...         new_b.append(y)
...         seen.add(x)
...         
>>> new_a
['1', '2', '3']
>>> new_b
['a', 'b', 'c']

使用itertools.compress(仅限Python 2.7+和3.1+)执行此操作的另一种方法:

>>> from itertools import compress, tee
>>> seen = set()
>>> f1, f2 = tee(True if x not in seen and not seen.add(x) else False for x in a)
>>> list(compress(a, f1))
['1', '2', '3']
>>> list(compress(b, f2))
['a', 'b', 'c']

答案 1 :(得分:-1)

您可以使用设置删除列表中的重复条目。请使用以下代码获得所需的输出。

#!/usr/bin/python
a=['1','2','3','3','3']
b=['a','b','c','d','e']
a=set(a)
print list(a)
lena=len(a)
b=set(b)
b=list(b)


print b[:lena]

输出:

  >>> 
 ['1', '3', '2']
 ['a', 'c', 'b']