有没有更好的方法来随机洗牌两个相关的列表,而不会破坏其他列表中的通信?我在numpy.array
和c#
中发现了相关的问题,但不完全一样。更好的方式来洗牌两个相关的列表
作为第一次尝试,一个简单的zip
招会做:
import random
a = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
b = [2, 4, 6, 8, 10]
c = zip(a, b)
random.shuffle(c)
a = [e[0] for e in c]
b = [e[1] for e in c]
print a
print b
它会得到输出:
[[1, 2], [7, 8], [3, 4], [5, 6], [9, 10]]
[2, 8, 4, 6, 10]
只是觉得有点别扭。而且它也需要一个额外的列表。
您可以用'zip'解压名单,以及:'A,B = ZIP(* C)' – mgilson 2012-08-01 18:16:07
我也一般不推荐方案设计你需要保留一组平行列表的地方。只保留1个列表。创建某种类或某些内容来统一数据。 – mgilson 2012-08-01 18:19:02
如果你想用'numpy'做这样的工作,这里是一个很好的解决方案:http://stackoverflow.com/questions/4601373/better-way-to-shuffle-two-numpy-arrays-in-unison – Mithril 2016-04-14 08:24:58