숫자와 문자가 모두 포함 된 목록이 있다고 가정 해 보겠습니다. 목록에 특정 요소가 포함되어 있지 않은지 빠르게 확인할 수 있습니까? 나는 그것을 조건에서 사용할 계획이다.파이썬, 목록에 특정 항목이 없다는 것을 알아 낸다
답변
어쩌면
3 not in [1, 2, "a"]
# True
참고 : 딕셔너리의 키와 요소를 넣을 수 있습니다 경우, 회원 가입을 테스트하는 해시 알고리즘에 훨씬 빠르고 감사합니다. 목록이 너무 길거나 앱이 이런 종류의 일을 많이하는 경우에만 문제가됩니다. 그렇지 않으면 스벤 (Sven)이 말했듯이 "X는 Y가 아니다"라고 말한다.
any(isinstance(x, int) for x in alist)
:
이 경우 세트를 사용할 수도 있습니다. –
dict 값을 사용하지 않는 경우 집합을 사용해야합니다. – FogleBird
당신은 (스벤 Marnach에 의해)
bool([x for x in alist if isinstance(x, int)])
더 나은 버전을 의미합니까?
이것은 OP가 원했던 것이고 이것이 더 간결하고 첫 번째 int가 발견되면 iterating을 멈추기 때문에 OP를 원한다면, 그것을 'any (isinstance (x, int) for x alist)'로 쓰는 것이 낫습니다. 그러나 나는 이것이 이것이 요구되는 것이라고 생각하지 않는다. –
네 말이 맞아. 내가 편집;) – Ant
당신이하려는 일에 달려 있습니다. 속도가 중요하지 않다면, 먼저를 사용하십시오. 문제가된다면 먼저 목록을 다른 데이터 구조 (예 : 말 목록의 항목을 자주 찾습니다), 크기 등으로 변환 할 수 있는지 여부에 따라 달라집니다.
아이디어를 제공하려면 :
import timeit
a = range(10000)
da = dict(zip(a, [None for i in a]))
def list_first():
return 0 in a
def dict_first():
return 0 in da
def list_last():
return 9999 in a
def dict_last():
return 9999 in da
if __name__ == "__main__":
for f in ["list_first", "dict_first", "list_last", "dict_last"]:
t = timeit.Timer("%s()" % f, setup="from __main__ import %s" % f)
print min(t.repeat(number=10000))
이 저를 제공합니다
예상대로 물건을 빠르게하지 않는 DICT를 사용하여 목록의 시작 부분에있는 항목에 대한 보면0.00302004814148
0.00318598747253
4.21943712234
0.004145860672
. 마지막에 항목을 찾으면 예상 한대로 차이가 매우 크게 나옵니다 (해독 가능). 목록은 하나씩 다른 항목을 찾아야합니다.
항목이 유사한 경우 시퀀스를 정렬하고 N 대신 log (N), log (N)을 N에 비해 상대적으로 빠른 비교적 빠른 속도로 정렬 할 수 있습니다. 파이썬의 경우 실제로 너무 큼) 또는 고급 구조 (바이너리 검색 트리 등)를 사용합니다. 꽤 복잡해질 수 있습니다 - 빠른 검색을위한 데이터 구조는 결국 CS에서 가장 많이 연구 된 문제 중 하나입니다.
여기 dicts 대신 세트를 사용하여 코드의보다 간결한 버전입니다 : https://gist.github.com/742056. 특히'timeit.Timer'에 대한 생성자 호출은 약간 장황 해 보입니다 :) –
- 1. 얼마나 많은 SD 카드가 안드로이드 장치를 운반하는지 알아 낸다
- 2. jQuery 브라우저 창 크기가 바뀌더라도 요소 너비를 알아 낸다.
- 3. XPath에서 목록에 특정 항목이 있는지 어떻게 확인할 수 있습니까?
- 4. appdomain 프록시 객체가 없다는 것을 감지하는 방법
- 5. 파이썬 - 목록에
- 6. 클릭 된 항목이 어떤 양식인지 알아 내십시오
- 7. 파이썬 NLTK 시제 알아 내기
- 8. 파이썬 (mod_wsgi)을 사용하여 아파치에서 PHP 세션의 내용을 잡아 낸다?
- 9. 수업을 목록에 넣으십시오. 파이썬
- 10. 파이썬 목록에 문제가있어서
- 11. 트리 항목이 자신으로 드래그되는 것을 방지하려면 어떻게해야합니까?
- 12. 항목이 제거 될 때 스파크 목록에 선택 항목이 표시되지 않습니다.
- 13. 라인 시작 부분에 공백이 없다는 것을 알아챌 Regex (flex)
- 14. 파이썬 정규식 특정 텍스트 만 캡처
- 15. 확인 파이썬 목록 항목이 다른 문자열
- 16. 목록에 이미 항목이 포함되어 있는지 확인하십시오.
- 17. HTML 목록 항목을 파이썬 목록에 어떻게 추출합니까?
- 18. 쌍 프로그래밍이란 디자인 문서가 필요 없다는 것을 의미합니까?
- 19. HttpRuntime.get_UsingIntegratedPipeline() 메소드가 예외를 찾을 수 없다는 것을 어떻게 수정합니까?
- 20. 특정 위치의 목록에 스칼라 삽입
- 21. 프로그래밍 방식으로 HTML에서 브라우저에서 C와 함께 렌더링되는 높이와 너비를 알아 낸다.
- 22. 특정 인터페이스가 어떤 유형인지 알아 내십시오
- 23. java assert가 이상한 결과를 낸다
- 24. 목록에 포함 할 것을 나타내는 확인란?
- 25. 수업이 목록에 규칙을 적용하는 것을 거부합니다.
- 26. 루프를 사용하여 목록에 개체 추가 (파이썬)
- 27. Flex 4.0의 자동 완성 드롭 다운 목록에 항목이 표시되지 않습니다.
- 28. "AttributeError : 'unicode'객체에 특정 URL에 'user'속성이 없다는 이유는 무엇입니까?
- 29. __str__ 메쏘드로 파이썬 객체 목록에 합류하기
- 30. 파이썬 목록에 독서를 추가하는 방법은 무엇입니까?
튜플이 더 좋지 않습니까? – user225312
@A A : OP는 요소가 목록에 있는지 확인하도록 요청했습니다. 아마도 그 목록은 자신의 코드에 하드 코딩되지 않을 것입니다. –