争夺Python列表

时间:2012-03-19 13:01:09

标签: python arrays list shuffle

在我提出问题之前,让我直截了当地说明......

这不是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()。如果没有内置函数,我可以定义一个函数来执行此操作。

3 个答案:

答案 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)]