2014-10-04 4 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

관련 문제