Python のランダム モジュールを深く掘り下げていくと、random.shuffle( )。予想に反して、この関数は、表向きリストをシャッフルした後、エーテルの None 値を返すように見えます。この謎を解明するために、random.shuffle の内部構造への旅に出ましょう。
変更されたデータ構造を返すという規則に反して、random.shuffle () はより謎めいた道を選びます。それは、そのアクションの具体的な証拠を示さずに、適用されるリストを静かに変換します。 「インプレース変更」として知られるこの微妙な変更は、データ構造を変更する多くの Python API メソッドの特徴です。したがって、random.shuffle() は None を返し、明示的な確認なしにシャッフルされたリストが残ります。
random.shuffle() の捉えどころのない動作を目撃するには、次のことを考慮してください。コード:
x = ['foo', 'bar', 'black', 'sheep'] from random import shuffle random.shuffle(x) print(x)
このコードを実行すると、シャッフルされたリストが出力され、次の結果が表示されます。 random.shuffle() の目に見えない作業です。
ただし、単にリストの変換を目撃するだけでなく、新しいシャッフルされたリストを作成したい場合は、他の方法もあります。待っててください。 Random.sample() は、提供する準備ができており、元のリストはそのままにして、既存のリストのシャッフルされたコピーを生成する方法を提供します。
shuffled_x = random.sample(x, len(x))
あるいは、sorted() と random.random() を組み合わせると、計算コストはかかりますが、シャッフルされたリストへの別のルート:
shuffled_x = sorted(x, key=lambda k: random.random())
どちらのアプローチでもシャッフルされたリストが生成されます。
random.shuffle() 関数の独特の動作は、最初は眉をひそめるかもしれませんが、その本質を理解すると、場所の変更の性質を理解し、新しいシャッフルされたリストを作成するための代替アプローチを模索することで、そのランダム化の魔法を効果的に利用できるようになります。
以上がPython の「random.shuffle()」が「None」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。