319

Pythonで配列をシャッフルする最も簡単な方法は何ですか?

4

11 に答える 11

567
import random
random.shuffle(array)
于 2009-01-23T18:37:27.630 に答える
111
import random
random.shuffle(array)
于 2009-01-23T18:38:14.663 に答える
21

random.shuffle他の答えは最も簡単ですが、メソッドが実際には何も返さないのは少し面倒です。指定されたリストをソートするだけです。呼び出しを連鎖させたい場合、またはシャッフルされた配列を1行で宣言できるようにしたい場合は、次のことができます。

    import random
    def my_shuffle(array):
        random.shuffle(array)
        return array

次に、次のような行を実行できます。

    for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
于 2011-12-20T22:05:30.333 に答える
12

通常の Python リストを扱う場合random.shuffle()、前の回答が示すように機能します。

しかし、ndarray( numpy.array) にrandom.shuffleなると元の を破るようndarrayです。次に例を示します。

import random
import numpy as np
import numpy.random

a = np.array([1,2,3,4,5,6])
a.shape = (3,2)
print a
random.shuffle(a) # a will definitely be destroyed
print a

使用するだけです:np.random.shuffle(a)

のように、配列をその場random.shufflenp.random.shuffleシャッフルします。

于 2013-10-28T09:23:27.887 に答える
8

ランダムキーで配列をソートできます

sorted(array, key = lambda x: random.random())

キーは一度だけ読み取られるため、ソート中のアイテムの比較は依然として効率的です。

random.shuffle(array)ただし、Cで記述されているため、高速になるように見えます

これは O(log(N)) ところで

于 2018-09-21T18:37:26.350 に答える