如何将两列Python列表改组?

时间:2016-01-19 17:47:31

标签: python list random shuffle

随机播放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.
]

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

我想要对这个两列列表进行洗牌,以便对具有相应事件编号的事件进行洗牌。请注意,我不想随机播放事件特征列表。因此,在此示例中,shuffle的结果可能如下:

[
    [
        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。

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

1 个答案:

答案 0 :(得分:1)

Numpy允许对数组切片进行原位改组。

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