在我提出问题之前,让我直截了当地说明......
这不是Does anyone know a way to scramble the elements in a list?和Shuffle an array with python, randomize array item order with python的重复。我会解释原因......
我想知道如何加扰数组, 制作新副本 。由于random.shuffle()
修改了列表(并返回None
),我想知道是否有其他方法可以执行此操作,因此我可以执行scrambled=scramblearray()
。如果没有内置函数,我可以定义一个函数来执行此操作。
答案 0 :(得分:15)
def scrambled(orig):
dest = orig[:]
random.shuffle(dest)
return dest
和用法:
import random
a = range(10)
b = scrambled(a)
print a, b
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [6, 0, 2, 3, 1, 7, 8, 5, 4, 9]
答案 1 :(得分:4)
使用sorted()。它返回一个新列表,如果你使用随机数作为键,它将被加扰。
import random
a = range(10)
b = sorted(a, key = lambda x: random.random() )
print a, b
<强>输出强>:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [5, 9, 0, 8, 7, 2, 6, 4, 1, 3]
答案 2 :(得分:3)
复制数组然后加扰它:
import random
array = range(10)
newarr = array[:] # shallow copy should be fine for this
random.shuffle(newarr)
#return newarr if needs be.
zip(array, newarr) # just to show they're different
Out[163]:
[(0, 4),
(1, 8),
(2, 2),
(3, 5),
(4, 1),
(5, 6),
(6, 0),
(7, 3),
(8, 7),
(9, 9)]