ТЛ; др
for first_item in muh_set: break
остается оптимальный подход в Python 3.x. Проклинаю тебя, Гвидо.
ты делаешь это
Добро пожаловать в еще один набор времени Python 3.x, экстраполированный из wr. «S отлично 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
Faceplants для всей семьи
Неудивительно, что итерация вручную остается как минимум вдвое быстрее, чем следующее быстрое решение. Несмотря на то, что разрыв сократился по сравнению с плохим старым Python 2.x днями (в которых ручная итерация была как минимум в четыре раза быстрее), меня разочаровывает фанат PEP 20 , что самое подробное решение - лучшее. По крайней мере, преобразование набора в список просто для извлечения первого элемента набора так же ужасно, как и ожидалось. Спасибо Гвидо, пусть его свет будет продолжать направлять нас.
Удивительно, но решение на основе ГСЧ абсолютно ужасно. Преобразование списка плохое, но на random
самом деле это просто ужасный соус. Так много для Бога случайных чисел .
Я просто желаю аморфным Они бы уже нашли set.get_first()
способ для нас. Если вы читаете это, они: «Пожалуйста. Сделайте что-нибудь».