2016-04-05 1 views
-1

すべての配列要素の位置が変更されるように、配列をシャッフルする必要があります。与えられた配列[0,1,2,3]では、[1,0,3,2]または[3,2,0,1]を取得することはできますが、[3,1,2,0]は取得できません。すべての要素がその場所を変更するように配列をシャッフルするには?

これを行うためのPythonの関数はありますか、それとも自分自身で行う必要がありますか?私は考えることができる

+0

[シャープルと配列の並べ替え](http://stackoverflow.com/questions/473973/shuffle-an-array-with-python) – Jeff

答えて

1

最短ソリューションは、すべての要素が別の場所になるまで結果をシャッフルし、チェックするためにrandom.shuffle(v)を使用することです:

while not allDifferent(v): 
    random.shuffle(v) 

この危険性は、あなたが潜在的に持っていることはもちろんです何度も試してみるのですが、それは非常に大きな問題ではありません。これに対していくつかのテストを実行した後、すべての要素が異なる位置にある前の平均試行回数は、リストの長さ3では約3です。リストの長さが5の場合は2.7、長いリストの場合は2.7前後です1000)。

このような確率に頼るのはちょっと難しいですが、ほとんどのアプリケーションではうまくいくはずです。

編集:すぐに何かを好む場合は、おそらく自分で行う必要があります。 (理由i+1の)以前のように何の数が同じ場所で終わるしないように1は、配列をシャッフルします

for i in range(0, len(a)-1): 
    pick = random.randint(i+1, len(a)-1) 
    a[i], a[pick] = a[pick], a[i] 

:このような何か。

関連する問題