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