是否有一种简单的方法可以在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 –