Python:随机播放并创建一个新数组

cqc*_*991 2 python random shuffle list

我想要改组一个数组,但我找到的只是方法random.shuffle(x),从最好的方式来随机化Python中的字符串列表

我能做点什么吗

import random
rectangle = [(0,0),(0,1),(1,1),(1,0)]
# I want something like
# disorderd_rectangle = rectangle.shuffle
Run Code Online (Sandbox Code Playgroud)

现在我只能逃脱

disorderd_rectangle = rectangle
random.shuffle(disorderd_rectangle)
print(disorderd_rectangle)
print(rectangle)
Run Code Online (Sandbox Code Playgroud)

但它回来了

[(1, 1), (1, 0), (0, 1), (0, 0)]
[(1, 1), (1, 0), (0, 1), (0, 0)]
Run Code Online (Sandbox Code Playgroud)

所以original array也改变了.如何在array不改变原始状态的情况下创建另一个洗牌?

Vek*_*eky 8

这里的人们建议使用深度复印,这肯定是一种矫枉过正.您可能不介意列表中的对象是相同的,您只是想要改变它们的顺序.为此,列表直接提供浅层复制.

rectangle2 = rectangle.copy()
random.shuffle(rectangle2)
Run Code Online (Sandbox Code Playgroud)

关于您的误解:请阅读http://nedbatchelder.com/text/names.html#no_copies


Buğ*_*doğ 5

用于random.sample打乱列表而不更改原始列表。

from random import sample
rect = [(0,0),(0,1),(1,1),(1,0)]
shuffled_rect = sample(rect, len(rect))
Run Code Online (Sandbox Code Playgroud)

上面的代码片段速度较慢,但​​只是另一种方式。