Python の「random.shuffle()」が「None」を返すのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-26 14:31:10
オリジナル
777 人が閲覧しました

Why Does Python's `random.shuffle()` Return `None`?

Python でのリストのシャッフル: 謎めいた None Return の解明

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート