是否有一種簡單的方法可以在Python中返回一個混洗數組,而不是將其混洗到位?Python中的混洗
例如,而不是
x = [array]
random.shuffle(x)
我正在尋找類似
y = shuffle(x)
它保持X。
注意,我不是在尋找一個函數,而不是像這樣:
x=[array]
y=x
random.shuffle(x)
是否有一種簡單的方法可以在Python中返回一個混洗數組,而不是將其混洗到位?Python中的混洗
例如,而不是
x = [array]
random.shuffle(x)
我正在尋找類似
y = shuffle(x)
它保持X。
注意,我不是在尋找一個函數,而不是像這樣:
x=[array]
y=x
random.shuffle(x)
sorted
與key
函數返回一個隨機值:
import random
sorted(l, key=lambda *args: random.random())
或者
import os
sorted(l, key=os.urandom)
只寫你自己的。
import random
def shuffle(x):
x = list(x)
random.shuffle(x)
return x
x = range(10)
y = shuffle(x)
print x # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print y # [2, 5, 0, 4, 9, 3, 6, 1, 7, 8]
沒有你正在尋找的功能。只需複製一個列表。
使用random
來實現您自己的操作將非常簡單。我想如下寫:
def shuffle(l):
l2 = l[:] #copy l into l2
random.shuffle(l2) #shuffle l2
return l2 #return shuffled l2
+1:這是O(n),而'sorted(...,key = os.urandom)'在O(n log n)中。 – EOL
你可以使用numpy.random.permutation的任一一個列表或數組,但是如果你已經有一個numpy數組,它是正確的函數。對於混合類型的列表,轉換爲numpy數組將進行類型轉換。
import numpy as np
my_list = ['foo', 'bar', 'baz', 42]
print list(np.random.permutation(my_list))
# ['bar', 'baz', '42', 'foo']
這是這個問題的最佳解決方案! – Ohumeronen
以此爲演示別處因此認爲它可能是值得分享:
import random
x = shuffleThis(x)
def shuffleThis(y):
random.shuffle(y)
return(y)
#end of Shuffle Function
希望這是非常有用的。
在2009年的一篇關於python-ideas的文章中討論過,因爲你可以寫'y = sorted(yourList,key = lambda x:random.random())'而不鼓勵。請參閱:http://mail.python.org/pipermail/python-ideas/2009-March/003661.html –