我有两个清单:
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
我想问一下,除了使用循环之外,还有更好的方法吗?
答案 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']