D = {(1,1):2, (2,3):6, (3,4):12, (0,1):0, (4,9):36}
for (i,j),val in D.items():
print(i,j,"-->",val)
(key,value)
辞書のペアをループするとき、順序は決定論的ですか?ランダムな順序でそれらをループするにはどうすればよいですか?以下は、辞書が小さい場合は機能しますが、ペアが数千の場合はメモリエラーが発生します。
from itertools import permutations
P = list(permutations(D.items()))
for (i,j),val in sample(P,1)[0]:
print(i,j,"-->",val)
エントリを繰り返す前に、エントリをシャッフルするのは比較的簡単なはずです。
from random import shuffle
dict_as_list_of_entries = [*D.items()]
shuffle(dict_as_list_of_entries) # randomizes the order
for (i, j), value in dict_as_list_of_entries:
# do something
辞書は挿入順序を記憶しているため、これはcpython3.6(python3.7)以降では意味があります。下位バージョンでは、結果は決定論的ではありません(実際には、「決定論的ではない」よりも少しニュアンスがありますが、これで問題ありません)。
の出力はshuffle
、ランダマイザーをシードすることによって決定論的にすることもできることに注意してください。「真のランダム性」はまだ概念に過ぎませんが、コンピューターはそれを達成するのに近づいています。ほとんどのランダマイザールーチンは、ランダム性とパフォーマンスの間のトレードオフです。
辞書のすべての順列を生成しているため、OOMしていることに注意してください(実際には、すべてではなく1つのランダム順列が必要です)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加