【问题标题】:How can a two-column Python list be shuffled?如何对两列 Python 列表进行洗牌?
【发布时间】:2016-01-19 17:47:31
【问题描述】:

打乱 Python 列表很简单:

>>> import random
>>> random.seed(100)
>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> random.shuffle(a)
>>> a
[7, 1, 5, 6, 4, 3, 2]

两列Python列表如何打乱?

所以,具体来说,我有以下代表形式的列表:

[
    [
        0.121282446303956,
        2.1595318494748978,
        0.43386778589085612
    ],
    [
        1
    ],
    [
        0.121282446303956,
        2.1595318494748978,
        0.43386778589085612
    ],
    [
        2
    ],
    [
        0.121282446303956,
        2.1595318494748978,
        0.43386778589085612
    ],
    [
        3
    ],
    [
        0.121282446303956,
        2.1595318494748978,
        0.43386778589085612
    ],
    [
        4
    ],
    # ... etc.
]

您可以将其想象为一种数据形式,它在一个列中捕获事件的三个​​特征(三个高精度数字),并在第二列中包含事件编号。

我想打乱这个两列的列表,以便打乱具有相应事件编号的事件。请注意,我不想打乱事件特征列表。因此,在本例中,随机播放的结果可能如下:

[
    [
        0.121282446303956,
        2.1595318494748978,
        0.43386778589085612
    ],
    [
        3
    ],
    [
        0.121282446303956,
        2.1595318494748978,
        0.43386778589085612
    ],
    [
        4
    ],
    [
        0.121282446303956,
        2.1595318494748978,
        0.43386778589085612
    ],
    [
        1
    ],
    [
        0.121282446303956,
        2.1595318494748978,
        0.43386778589085612
    ],
    [
        2
    ],
    # ... etc.
]

可以看到事件的顺序从1、2、3、4变成了3、4、1、2。

什么是做这种洗牌的好方法?

【问题讨论】:

  • 使用具有重复元素的列表作为改组的示例可能不是一个好主意。如果您使用不同的“事件”编号,示例会更清晰
  • 将具有不同语义的列表转换为元组列表(stackoverflow.com/questions/5389507/…)并打乱元组。

标签: python list random shuffle


【解决方案1】:

Numpy 允许对数组切片进行就地改组。

import numpy as np
a  = np.array(a)
np.random.shuffle(a[1::2])

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 2018-01-30
    • 2012-11-22
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2013-01-14
    • 2019-09-20
    相关资源
    最近更新 更多