리스트에 대한 짧은 포함 기능이 있습니까?


514

사람들이 any목록에 항목이 있는지 확인하기 위해 다른 목록을 수집 하는 데 사용 하지만 빠른 방법이 있습니까? :

if list.contains(myItem):
    # do something

귀하의 질문은 list contains item 이 아닌 list contains
smci

답변:


873

이 구문을 사용할 수 있습니다 :

if myItem in list:
    # do something

또한 역 연산자 :

if myItem not in list:
    # do something

목록, 튜플, 세트 및 dicts (체크 키)에 적합합니다.

참고 이 튜플리스트의 O (n)를 연산하고,하지만 세트 dicts에서 O (1) 동작.


1
numpy 배열을 포함하는 목록을 사용하면 numpy 인스턴스 또는 numpy 인스턴스 내부의 값을 검사합니까?
Daniel Möller

조심해! 이것은 아마 당신이 예상하지 못한 것일 수도 있지만 :o='--skip'; o in ("--skip-ias"); # returns True !
Alex F

3
@ AlexF : ("--skip-ias")터플이 아니라 문자열 이기 때문에 일치 합니다 (괄호 (1)는 정수 와 마찬가지로 아무것도하지 않습니다 ). 1- 튜플을 원하면 단일 항목 뒤에 쉼표를 추가해야합니다 ("--skip-ias",)(또는 (1,)).
Blckknght

문자를 비교하는 경우 대소 문자를 구분하지 않습니다.
Tillson

65

다른 사람들이 말한 것 외에도 메소드 in를 호출 하는 것이 무엇인지 알고 관심이있을 수 있습니다.이 list.__contains__클래스는 클래스를 정의하고 파이썬을 최대한 활용하는 데 매우 편리합니다.  

바보 같은 용도는 다음과 같습니다.

>>> class ContainsEverything:
    def __init__(self):
        return None
    def __contains__(self, *elem, **k):
        return True


>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>         

5

True목록에 항목이 여러 번 False포함되어 있는지 , 또는 항목이 없거나 전혀 포함되어 있지 않은 경우이 라이너를 최근에 생각해 냈습니다 . 를 사용 next(...)하면 기본 반환 값 ( False) 이 제공 되며 전체 목록 이해를 실행하는 것보다 훨씬 빠르게 실행됩니다.

list_does_contain = next((True for item in list_to_test if item == test_item), False)


제 경우에는 Category라는 객체 목록이 있고 속성 링크에 대해서만 테스트해야 하므로이 솔루션이 제 경우에 더 적합합니다. 감사합니다
rodrigorf

3
any(item == test_item for item in list_to_test)나도 작동 할 것 같아요?
누군가

3

아이템이 존재하지 않으면 list 메소드 index-1아이템을 반환하고리스트에 아이템의 인덱스가 있으면이를 반환합니다. 또는 if성명서에서 다음을 수행 할 수 있습니다.

if myItem in list:
    #do things

다음 if 문을 사용하여 요소가 목록에 없는지 확인할 수도 있습니다.

if myItem not in list:
    #do things

15
index메소드는 반환하지 않는 -1 요소가 존재하지 않는 경우가 발생 ValueError예외.
MondKin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.