Pythonがリスト(List)のソートをランダムに乱す方法
1722 ワード
シーン:
今list:
専門点の用語:1つのコンテナ内のデータをランダムに1回ずつ巡回します.
注:ランダムなリストセットを生成するわけではありません.
環境:
Python 3.6
ソリューション:
シナリオ1:
Randomに関数を内蔵することで、意図した結果を間接的に実現する人もいるかもしれません.しかし、この方式は、あまりにも原始的で、優雅ではなく、車輪を繰り返す疑いがある.ここで私はrandomで実現した効果を貼らない.
シナリオ2:
Randomにrandomがあるshuffle()メソッドは、完璧なソリューションを提供します.コードは次のとおりです.
出力結果:
結果から,出力は完全にランダムであり,コード量は2行でありrandomは必要なく,forループは必要ないことが分かった.
ソースの解読:
このセクションの原文リンク:Pythonでリストの順序を乱すrandom.shuffle()の使い方
注:コードの注釈から、
今list:
[1,2,3,4,5,6]
があります.このlistを出力するときは、ランダムに乱す形で出力する必要があります.専門点の用語:1つのコンテナ内のデータをランダムに1回ずつ巡回します.
注:ランダムなリストセットを生成するわけではありません.
環境:
Python 3.6
ソリューション:
シナリオ1:
Randomに関数を内蔵することで、意図した結果を間接的に実現する人もいるかもしれません.しかし、この方式は、あまりにも原始的で、優雅ではなく、車輪を繰り返す疑いがある.ここで私はrandomで実現した効果を貼らない.
シナリオ2:
Randomにrandomがあるshuffle()メソッドは、完璧なソリューションを提供します.コードは次のとおりです.
x = [1,2,3,4,5,6]
random.shuffle(x)
print(x)
出力結果:
:[6, 5, 1, 3, 2, 4]
:[6, 1, 3, 5, 2, 4]
:[5, 3, 1, 2, 4, 6]
結果から,出力は完全にランダムであり,コード量は2行でありrandomは必要なく,forループは必要ないことが分かった.
ソースの解読:
このセクションの原文リンク:Pythonでリストの順序を乱すrandom.shuffle()の使い方
def shuffle(self, x, random=None):
"""Shuffle list x in place, and return None.
, 。
Optional argument random is a 0-argument
function returning a random float in [0.0, 1.0);
if it is the default None,
the standard random.random will be used.
random 0 , [0.0,1.0) ;
random None, random.random()。
"""
if random is None:
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i + 1)
x[i], x[j] = x[j], x[i]
else:
_int = int
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = _int(random() * (i + 1))
x[i], x[j] = x[j], x[i]
注:コードの注釈から、
random.shuffle()
は元のlistを変更していることがわかります.元のlistを保持する必要がある場合は、この詳細に注意してください.本文はBigYoung小駅で先発した.