tl; dr
for first_item in muh_set: break
Python 3.x에서 최적의 접근 방식으로 남아 있습니다. 저주, 귀도
너 이거 해
wr 에서 추정 한 또 다른 Python 3.x 타이밍 세트에 오신 것을 환영합니다 . 탁월한 Python 2.x 전용 응답 . AChampion 의 똑같이 유용한 Python 3.x 관련 응답 과는 달리 아래의 타이밍 은 위에서 제안한 이상치 해결책 도 포함합니다.
큰 기쁨을위한 코드 스 니펫
켜고 조정하고 시간을 정하십시오.
from timeit import Timer
stats = [
"for i in range(1000): \n\tfor x in s: \n\t\tbreak",
"for i in range(1000): next(iter(s))",
"for i in range(1000): s.add(s.pop())",
"for i in range(1000): list(s)[0]",
"for i in range(1000): random.sample(s, 1)",
]
for stat in stats:
t = Timer(stat, setup="import random\ns=set(range(100))")
try:
print("Time for %s:\t %f"%(stat, t.timeit(number=1000)))
except:
t.print_exc()
빨리 쓸모없는 영원한 타이밍
보다! 가장 빠르거나 느린 스 니펫으로 정렬 :
$ ./test_get.py
Time for for i in range(1000):
for x in s:
break: 0.249871
Time for for i in range(1000): next(iter(s)): 0.526266
Time for for i in range(1000): s.add(s.pop()): 0.658832
Time for for i in range(1000): list(s)[0]: 4.117106
Time for for i in range(1000): random.sample(s, 1): 21.851104
온 가족을위한 페이스 플랜트
당연히 수동 반복은 다음으로 빠른 솔루션 보다 2 배 이상 빠릅니다 . 수동 반복이 4 배 이상 빠르 던 Bad Old Python 2.x 일과의 격차가 줄어들었지만 가장 장황한 솔루션이 최고라고 PEP 20 열성에 실망했습니다 . 집합의 첫 번째 요소를 추출하기 위해 집합을 목록으로 변환하는 것은 예상만큼 끔찍합니다. 귀도에게 감사합니다. 그의 빛이 우리를 계속 인도 해 주시길 바랍니다.
놀랍게도 RNG 기반 솔루션은 끔찍합니다. 목록 변환은 좋지 않지만 random
실제로 는 끔찍한 소스 케이크가 필요합니다. 난수 신을 위해 너무 많은 .
나는 단지 비정질을 원합니다. 그들은 set.get_first()
이미 우리를 위해 방법을 PEP 할 것 입니다. 이 글을 읽고 있다면, "제발. 뭔가 해봐."