2

このコードを実行すると、セットは順序付けされていないため、結果は期待どおりに変化します。

my_set_1 = {'a','b','c',}
print([i for i in my_set_1])

つまり、複数回実行すると異なるリストが得られます。

['a', 'c', 'b']
['b', 'a', 'c']
['a', 'c', 'b']
['c', 'b', 'a']

注:コメントで示唆されているように、持っていない場合は、代わりに同じ結果が得られる可能性がありPYTHONHASHSEED=randomます。また、コンソールを使用して複製している場合Rerunは、コードを実行するたびにコンソールを確認してください。)


ただし、上記のコードを for ループに配置すると、結果はかなり驚くべきものになります。

for i in range(10):
    my_set_1 = {'a','b','c',}
    print([i for i in my_set_1])
# Prints: 
# ['a', 'c', 'b']
# ['a', 'c', 'b']
# ['a', 'c', 'b']
# ....

for ループを 1 回実行すると、同じリストが出力されます。for ループを再実行すると、別のリスト (例: ['c', 'b', 'a']) を出力できますが、変更せずに 10 回出力されます。

なぜ変わらないのですか?

4

2 に答える 2

4

セットの順序が変わるとは思わないでください。セットは、順序が不変ではないという意味で順序付けされていません。つまり、順序が変わらないという保証はありません。

実装はハッシュ テーブル (辞書) の形式です。キーの衝突がない限り、順序は変更されない可能性がありますが、わかりません。また、それがいつ、またはいつ発生するかを予測することもできません。

実験から結論を導き出す際には注意してください。得られる結果は予測できず、実行時のシステムの状態によって異なります。また、プラットフォーム、Python のバージョンなどを超えて保持されません...

于 2015-08-23T09:03:05.577 に答える