Python中的洗牌

18 投票
6 回答
23514 浏览
提问于 2025-04-17 05:11

有没有简单的方法可以在Python中返回一个打乱顺序的数组,而不是直接在原数组上打乱?

比如,不想这样:

x = [array]
random.shuffle(x)

我想要的类似于:

y = shuffle(x)

这样可以保持x的原样。

注意,我不是在找一个函数,也不是想要像下面这样的:

x=[array]
y=x
random.shuffle(x)

6 个回答

8

就自己写一个吧。

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]
13

random这个工具自己实现一个功能其实很简单。我会这样写:

def shuffle(l):
    l2 = l[:]           #copy l into l2
    random.shuffle(l2)  #shuffle l2
    return l2           #return shuffled l2
20

使用一个返回随机值的 key 函数来对 sorted 进行排序:

import random
sorted(l, key=lambda *args: random.random())

或者

import os
sorted(l, key=os.urandom)

撰写回答