>  기사  >  백엔드 개발  >  Python 목록(반복, 세트 또는 all())에서 여러 값의 멤버십을 효율적으로 테스트하는 방법은 무엇입니까?

Python 목록(반복, 세트 또는 all())에서 여러 값의 멤버십을 효율적으로 테스트하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 11:45:05361검색

How to Efficiently Test Membership of Multiple Values in a Python List: Iterating, Sets, or all()?

반복을 통해 목록에 있는 여러 값의 멤버십 테스트

목록에서 여러 값의 멤버십을 테스트할 때 Python의 동작은 혼란스러울 수 있습니다. ['b', 'a', 'foo', 'bar']에서 'a','b'를 사용하면 ('a', True)가 반환되며, 이는 결과가 첫 번째 요소가 첫 번째 값인 튜플임을 나타냅니다. 선택되어 있고 두 번째 요소는 해당 값의 구성원입니다. 목록에 있는 여러 값의 멤버십을 테스트하려면 다음 접근 방식을 권장합니다.

all(x in ['b', 'a', 'foo', 'bar'] for x in ['a', 'b'])

이 문은 all() 함수 내의 생성기 표현식을 사용하여 두 번째 목록의 각 값이 멤버십에 있는지 테스트합니다.

대체 접근 방식

반복 기반 방법은 일반적으로 신뢰할 수 있지만 대체 접근 방식이 존재합니다. 세트를 사용하면 하위 세트 테스트 옵션이 제공됩니다.

set(['a', 'b']).issubset(set(['a', 'b', 'foo', 'bar']))

그러나 세트에는 해시 가능한 요소만 포함될 수 있으므로 적용이 제한됩니다.

속도 고려 사항

하위 집합 테스트는 일반적으로 더 빠르지만 컨테이너와 항목이 모두 작은 경우에만 차이가 중요합니다. 대부분의 경우 all() 함수를 사용하는 것이 여전히 효율적입니다.

항목이 이미 목록에 있는 경우 하위 집합 테스트를 사용하기 전에 해당 항목을 집합으로 변환하면 속도가 약간 향상될 수 있습니다. 세트가 아닌 컨테이너를 세트로 변환하는 것은 속도 향상이 미미하고 추가 저장 오버헤드가 문제가 될 수 있으므로 권장되지 않습니다.

예외 사례

많은 수의 값에 대한 멤버십 테스트(특히 일부 값이 컨테이너에 없는 경우) all()은 하위 집합 테스트에 비해 상당한 속도 이점을 제공할 수 있습니다. 이는 컨테이너에 존재하지 않는 테스트 요소를 우회할 수 있는 단락 동작 때문입니다.

요약

일반적인 사용의 경우 해당 요소가 해시 가능한 경우 컨테이너를 세트로 설정하는 것이 좋습니다. 하위 집합 테스트는 테스트 항목이 이미 집합에 저장되어 있는 경우에만 유리합니다. 다수의 값에 대한 멤버십 테스트와 같은 특정 상황에서는 all()이 탁월한 성능을 제공합니다.

위 내용은 Python 목록(반복, 세트 또는 all())에서 여러 값의 멤버십을 효율적으로 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.