2014-10-04 2 views
3

Мне было интересно, как узнать, когда пользователь вводит значение, это значение уже существует в списке.Как найти значения дубликатов в списке Python

Например,

lis = ['foo', 'boo', 'hoo'] 

пользователь вводит:

'boo' 

Теперь мой вопрос, как я могу сказать пользователю, это значение уже существует в списке.

+1

Ваш вопрос более * избегает * дубликатов в списке. Если вам не нужен порядок, вы также можете использовать 'set', который, если вы попытаетесь добавить дубликат, игнорирует его. –

+0

о да ... функция набора ... Я немного незнакома с ее использованием .. но я действительно видел это в действии. – Andre

+1

Это не функция, но [полномасштабный тип данных] (https://docs.python.org/2/library/stdtypes.html#set-types-set-frozenset) вместе с 'int',' dict', 'list' и' str'. –

ответ

4

Использование in operator:

>>> lis = ['foo', 'boo', 'hoo'] 
>>> 'boo' in lis 
True 
>>> 'zoo' in lis 
False 

Вы также можете использовать lis.index, который возвращает индекс элемента.

>>> lis.index('boo') 
1 

Если элемент не найден, то он поднимет ValueError:

>>> lis.index('zoo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: 'zoo' is not in list 

UPDATE

Как Ник T прокомментировал, если вы не заботитесь о порядке вещей, вы могут использовать set:

>>> lis = {'foo', 'boo', 'hoo'} # set literal == set(['foo', 'boo', 'hoo']) 
>>> lis.add('foo') # duplicated item is not added. 
>>> lis 
{'boo', 'hoo', 'foo'} 
+0

Спасибо, много друг! Это помогло многим ... и прояснить некоторые идеи. :) – Andre

4

Еще один способ, которым Вы можете сделать это коллекция использования: -

import collections 
lis = ['foo', 'boo', 'hoo'] 
# Now if user inputs boo 
lis.append('boo') 
print [x for x, y in collections.Counter(lis).items() if y > 1] 
# Now it will print the duplicate value in output:- 
boo 

Но выше один не является эффективной. Таким образом, для эффективного использования, установленного как falsetru, указано в ответе: -

totalList= set() 
uniq = [] 
for x in lis: 
    if x not in totalList: 
     uniq.append(x) 
     totalList.add(x) 
+0

Спасибо, брат Хуссейн, это очень хороший пример. Второй пример короткий и краткий, очень хороший. – Andre

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