tl; dr
for first_item in muh_set: break
Python 3.xの最適なアプローチのままです。あなたをのろい、グイド。
これをやる
wrから推定されたPython 3.xタイミングのさらに別のセットへようこそ。Python 2.x固有の優れた応答。AChampionの同等に役立つPython 3.x固有の応答とは異なり、以下のタイミングは、上で提案された時間外れ値の解決策も含みます。
Great Joyのコードスニペット
電源を入れ、調整し、時間を計ります:
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
家族全員のためのフェイスプラント
当然のことながら、手動の反復は、次に高速なソリューションの少なくとも2倍の速度を維持します。Bad Old Python 2.xの日(手動での反復が少なくとも4倍の速さでした)からギャップは減少しましたが、最も冗長なソリューションが最善であるという点で、PEP 20熱狂的な期待を裏切っています。少なくとも、セットの最初の要素を抽出するためだけにセットをリストに変換することは、予想どおり恐ろしいことです。グイドに感謝します。彼の光が私たちを導き続けますように。
驚くべきことに、RNGベースのソリューションはひどいものです。リスト変換は悪いですが、random
本当にひどいソースケーキをとります。乱数神にそんなに。
私はアモルファスが彼らがset.get_first()
すでに私たちのための方法をPEPすることを望みます。これを読んでいる場合、彼らは「お願いします。何かしてください。」