тл; д-р
for first_item in muh_set: break
залишається оптимальним підходом у Python 3.x. Прокляни тебе, Гвідо.
ти це зробиш
Ласкаво просимо до ще одного набору синхронізацій Python 3.x, екстрапольованого з wr. відмінна відповідь Python 2.x-специфічна . На відміну від не менш корисної для конкретного відповіді Python 3.x для AChampion , наведені нижче терміни також пропонують рішення, що пропонуються вище, включаючи:
Кодові фрагменти для великої радості
Увімкніть, налаштуйте, час:
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
Лицьові рослини для всієї родини
Не дивно, що ручна ітерація залишається принаймні удвічі швидшою, ніж наступне найшвидше рішення. Хоча розрив зменшився від Bad Old Python за двадцять днів (коли ручна ітерація була принаймні у чотири рази швидшою), це розчаровує в мене ревника PEP 20 тим, що найголовніше рішення є найкращим. Принаймні перетворення набору в список лише для вилучення першого елемента набору є таким же жахливим, як і очікувалося. Дякую Гуйдо, нехай його світло продовжує нас керувати.
Дивно, але рішення, що базується на СПГ, абсолютно жахливе. Перетворення списків погано, але random
насправді приймає жахливий торт-соус. Стільки за Бога випадкового числа .
Я просто бажаю аморфним. Вони б вже підготували set.get_first()
метод для нас. Якщо ви читаєте це, вони: "Будь ласка. Робіть щось".