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不改变原始状态的情况下创建另一个洗牌?
这里的人们建议使用深度复印,这肯定是一种矫枉过正.您可能不介意列表中的对象是相同的,您只是想要改变它们的顺序.为此,列表直接提供浅层复制.
rectangle2 = rectangle.copy()
random.shuffle(rectangle2)
Run Code Online (Sandbox Code Playgroud)
关于您的误解:请阅读http://nedbatchelder.com/text/names.html#no_copies
用于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)
上面的代码片段速度较慢,但只是另一种方式。