gpt4 book ai didi

python - 在 Python 中分别洗牌两个列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:08 27 4
gpt4 key购买 nike

这是我的代码:

import random
from random import shuffle

a = ['a','b','c','d']
b = ['a','b','c','d']
c = ['w','x','y','z']
d = ['w','x','y','z']
indices = random.sample(range(len(a)), len(a))
a = map(a.__getitem__, indices)
b = map(b.__getitem__, indices)
shuffle(c)
shuffle(d)
print a,b,c,d

这段代码的作用是按相同的顺序打乱 a 和 b,并按它们自己的顺序打乱 c 和 d。我现在要做的是制作两个更长的列表,分别由 a 和 c、b 和 d 组成,并将它们随机排列。我想要的是 a 和 b 在列表中保持相同的顺序。有什么办法吗?任何帮助将不胜感激。 :)

编辑:

我希望输出看起来像这样,其中列表 a&b 对应,c&d 只是独立随机化。

['d','x','w','b','a','y','c','z']

['d','z','y','b','a','x','c','w']

最佳答案

如果我们先打乱 cd,从连接列表 acbd 中随机抽样得到所需结果(我使用的是 Python 3,因此打印需要括号):

import random
from random import shuffle

a = ['a','b','c','d']
b = ['a','b','c','d']
c = ['w','x','y','z']
d = ['w','x','y','z']
shuffle(c)
shuffle(d)
# print a,b,c,d
print (a,b,c,d)
ac = a + c
bd = b + d
indices = random.sample(range(len(ac)),len(ac))
ac = list(map(ac.__getitem__, indices))
bd = list(map(bd.__getitem__, indices))
#print ac, bd
print (ac, bd)

输出如下:

['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'd'] ['x', 'w', 'z', 'y']['y', 'z', 'w', 'x']
['y', 'z', 'c', 'x', 'b', 'w', 'd', 'a'] ['x', 'w', 'c', 'y', 'b', 'z', 'd', 'a']

编辑:

感谢@Jan-Philip Gehrcke,他指出当列表很大时使用 numpy 索引(如下所示)要快得多:

from random import shuffle
import numpy as np

a = ['a','b','c','d']
b = a[:]
c = ['w','x','y','z']
d = c[:]
shuffle(c)
shuffle(d)
# print a,b,c,d
print (a,b,c,d)
ac = np.array(a + c)
bd = np.array(b + d)
indices = list(range(len(ac)))
shuffle(indices)
ac = ac[indices]
bd = bd[indices]
#print ac, bd
print (ac, bd)

关于python - 在 Python 中分别洗牌两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28750289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com