如何在Python中混淆几个列表或数组?

时间:2016-07-14 19:15:52

标签: python permutation shuffle

假设我有一个列表A并将其改组:

import random
random.shuffle(A)

现在我要使用相同的排列方式对seconf列表B进行随机播放,就像shuffle应用于A一样。

怎么可能?

熊猫怎么样?

3 个答案:

答案 0 :(得分:3)

您可以随机播放一系列索引:

import random

def reorderList(l, order):
    ret = []
    for i in order:
        ret.append(l[i])
    return ret

order = random.shuffle(range(len(a)))
a = reorderList(a, order)
b = reorderList(b, order)

答案 1 :(得分:2)

使用pandas,您可以改为代替索引:

df = pd.DataFrame(np.random.choice(list('abcde'), size=(10, 2)), columns = list('AB'))

df
Out[39]: 
   A  B
0  c  e
1  b  e
2  c  e
3  a  d
4  e  d
5  d  d
6  b  b
7  a  e
8  e  b
9  a  b

使用frac=1进行抽样可为您提供随机数据框:

df.sample(frac=1)
Out[40]: 
   A  B
6  b  b
5  d  d
1  b  e
2  c  e
9  a  b
8  e  b
4  e  d
7  a  e
3  a  d
0  c  e

答案 2 :(得分:2)

你可以在改组之前zip列表,然后解压缩它们。它不是特别节省内存(因为你在洗牌期间基本上复制了列表)。

a = [1,2,3]
b = [4,5,6]

c = zip(a, b)
random.shuffle(c)

a, b = zip(*c)