2014-10-29 2 views
0

У меня есть два списка:Удалить дубликат из двух списков без использования цикла?

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

этих двух списков имеют одинаковое количество элементов. Я хочу удалить дубликат в a и b с одним индексом. для этого примера, я хотел бы иметь результат, как

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

Я не так хорошо знаком с Python, единственным способом, я думаю, использовать петлю

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

Я хочу спросить, есть ли любой лучший способ сделать это, кроме использования цикла?

+0

Iterate его от и и поместить его в 'Словаре()' он будет делать все, что вы хотите. Затем используйте 'lst1, lst2 = zip (* d.items())' для получения ваших списков –

ответ

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

Вы можете использовать набор для удаление дубликатов записей в списке . Для получения желаемого результата используйте следующий код.

#!/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'] 
+0

Это работает только потому, что все дубликаты находятся в конце. Например, '['1', '2', '2', '2', '3']' не будут работать как входные данные. – Sneftel

+0

Он просил его пример. Я не имел в виду, что он будет работать для других списков. Я просто ответил на его вопрос. Можете ли вы правильно прочитать вопрос? – jack

+0

Его вопрос заключался в том, как удалить параллельные дубликаты из списка, а не как получить конкретный список '['a', 'b', 'c']'. Это был просто пример. – Sneftel

Смежные вопросы