Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
置乱Python列表_Python_Arrays_List_Random_Shuffle - Fatal编程技术网

置乱Python列表

置乱Python列表,python,arrays,list,random,shuffle,Python,Arrays,List,Random,Shuffle,在我问我的问题之前,让我澄清一下 这不是和的副本。我会解释为什么 我想知道如何对数组进行置乱,并制作一个新副本。因为random.shuffle()修改了列表(并返回None),所以我想知道是否有其他方法可以执行scrambled=scramblearray()。如果没有内置函数,如果可能的话,我可以定义一个函数来实现这一点 def scrambled(orig): dest = orig[:] random.shuffle(dest) return dest 使用方法

在我问我的问题之前,让我澄清一下

这不是和的副本。我会解释为什么

我想知道如何对数组进行置乱,并制作一个新副本。因为
random.shuffle()
修改了列表(并返回
None
),所以我想知道是否有其他方法可以执行
scrambled=scramblearray()
。如果没有内置函数,如果可能的话,我可以定义一个函数来实现这一点

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]
复制阵列,然后将其置乱:

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)]
使用排序()。它返回一个新列表,如果您使用一个随机数作为键,它将被置乱

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]

制作一份新的副本,然后把它弄乱有什么错?可能是@Marcin的副本。就我个人而言,我不认为这些答案可以与上面的答案合并。是的,他们可以。它们碰巧也证明了您可以复制数组。你没有理由不能自己解决这个问题。我认为你应该可以制作一个新的数组副本,并使用
random.shuffle()
对其进行置乱。它很好用。如果你不喜欢这种方式,你可能应该清楚地解释为什么你不想要。这将有助于我们理解。