tl; dr
for first_item in muh_set: break
continua sendo a abordagem ideal no Python 3.x. Maldito seja, Guido.
você faz isso
Bem-vindo a mais um conjunto de horários do Python 3.x, extrapolado de wr. é excelente resposta específica de 2.x do Python . Diferentemente da resposta específica do Python 3.x, igualmente útil, do AChampion , os intervalos abaixo também cronometram as soluções mais extremas sugeridas acima - incluindo:
Trechos de código para grande alegria
Ligue, sintonize, cronometre:
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()
Temporizações atemporais rapidamente obsoletas
Ver! Ordenados pelos snippets mais rápidos e mais lentos:
$ ./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
Faceplants para toda a família
Sem surpresa, a iteração manual permanece pelo menos duas vezes mais rápida que a próxima solução mais rápida. Embora a diferença tenha diminuído nos dias Bad Old Python 2.x (nos quais a iteração manual foi pelo menos quatro vezes mais rápida), decepciona o fanático do PEP 20 em mim, que a solução mais detalhada é a melhor. Pelo menos converter um conjunto em uma lista apenas para extrair o primeiro elemento do conjunto é tão horrível quanto o esperado. Graças a Guido, que sua luz continue a nos guiar.
Surpreendentemente, a solução baseada em RNG é absolutamente horrível. Conversão de lista é ruim, mas random
realmente leva o bolo de molho horrível. Tanta coisa para o Deus do Número Aleatório .
Eu só queria que os amorfos já tivessem um set.get_first()
método para nós. Se você está lendo isso, eles: "Por favor, faça alguma coisa".