tl; dr
for first_item in muh_set: break
reste l'approche optimale dans Python 3.x. Je te maudis, Guido.
tu fais ça
Bienvenue dans un autre ensemble de timings Python 3.x, extrapolé à partir de wr. est une excellente réponse spécifique à Python 2.x . Contrairement à AChampion réponse spécifique à Python 3.x tout aussi utile d' , les délais ci-dessous temporisent également les solutions aberrantes suggérées ci-dessus - y compris:
Extraits de code pour Great Joy
Allumez, syntonisez, chronométrez:
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()
Timings intemporels rapidement obsolètes
Voir! Ordonné par extraits les plus rapides aux plus lents:
$ ./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
Plantes faciales pour toute la famille
Sans surprise, l' itération manuelle reste au moins deux fois plus rapide que la solution la plus rapide suivante. Bien que l'écart ait diminué depuis les jours Bad Old Python 2.x (au cours desquels l'itération manuelle était au moins quatre fois plus rapide), il déçoit en moi le fanatique PEP 20 que la solution la plus verbeuse est la meilleure. Au moins, convertir un ensemble en liste juste pour extraire le premier élément de l'ensemble est aussi horrible que prévu.Merci Guido, que sa lumière continue de nous guider.
Étonnamment, la solution basée sur RNG est absolument horrible. La conversion de liste est mauvaise, mais prend random
vraiment le gâteau de sauce horrible. Voilà pour le Dieu du nombre aléatoire .
Je souhaite juste aux amorphes qu'ils auraient PEP une set.get_first()
méthode pour nous déjà. Si vous lisez ceci, ils: "S'il vous plaît. Faites quelque chose."