tl; Dr.
for first_item in muh_set: break
Python 3.x'te optimum yaklaşım olmaya devam ediyor. Lanet olsun, Guido.
bunu yap
Wr'den çıkarılan başka bir Python 3.x zamanlama setine hoş geldiniz . 'ın mükemmel Python 2.x'e özel yanıtı . Aksine AChampion 'eşit yardımcı s Python 3.x özgü tepki , zamanlama aşağıda ayrıca yukarıda önerilen çözümlerin uç değer süresi dahil olmak üzere -:
Büyük Sevinç için Kod Parçacıkları
Açın, ayarlayın, zamanlayın:
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()
Hızla Eskimiş Zamansız Zamanlamalar
Seyretmek! En hızlıdan en yavaş snippet'lere göre sıralanır:
$ ./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
Tüm Aile İçin Faceplantlar
Şaşırtıcı olmayan bir şekilde, manuel yineleme bir sonraki en hızlı çözümün en az iki katı kadar hızlı kalır . Boşluk Bad Old Python 2.x günlerinden (manuel yinelemenin en az dört kat daha hızlı olduğu) azalmasına rağmen, içimdeki PEP 20 zealotunu en ayrıntılı çözümün en iyi olduğu konusunda hayal kırıklığına uğrattı . En azından bir seti sadece setin ilk elemanını çıkarmak için bir listeye dönüştürmek beklendiği kadar korkunçtur. Teşekkürler Guido, ışığı bize rehberlik etmeye devam etsin.
Şaşırtıcı bir şekilde, RNG tabanlı çözüm kesinlikle korkunç. Liste dönüşüm kötü, ama random
gerçekten korkunç soslu kek alır. Rastgele Sayı Tanrı için çok fazla .
Ben sadece amorf diliyorum set.get_first()
Bizim için zaten bir yöntem PEP olurdu . Bunu okuyorsanız, Onlar: "Lütfen. Bir şeyler yapın."