Python,如何在特定范围内对列表数组进行洗牌?

3
我想问一下,如果我在Python中有一个像这样的列表数组:
a = [[1, 2, 3, 4, 5, 6], 
     [1, 2, 3, 4, 5, 6],
     [1, 2, 3, 4, 5, 6]]

如何在范围从 a[1][1]a[1][4] 内进行洗牌? 我只知道普通的洗牌。
random.shuffle(a)
2个回答

7
从子列表中取一个样本,将样本大小设置为同样的长度,然后将该样本重新分配给切片:
a[1][1:4] = random.sample(a[1][1:4], 3)

这个操作从源列表中随机取样三个元素(并以随机顺序产生这三个元素),然后将这些元素直接赋回到相同的索引位置。


谢谢!这是一种非常简单的方法! - FastBatteryCharger

1

如果您想使用shuffle,可以按照Martijn提供的相同方法进行操作,但需要将切片分配给一个名称,因为shuffle会直接混合元素。

>>> s=a[1][1:4]
>>> s
[2, 3, 4]
>>> shuffle(s)
>>> s
[4, 2, 3]
>>> a[1][1:4] = s
>>> a
[[1, 2, 3, 4, 5, 6], [1, 4, 2, 3, 5, 6], [1, 2, 3, 4, 5, 6]]

谢谢你!对于使用“s”来处理a [1] [1:4]更有用。 - FastBatteryCharger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接