【发布时间】:2012-07-30 16:36:59
【问题描述】:
有没有更好的方法来随机打乱两个相关列表而不破坏它们在另一个列表中的对应关系?我在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) -
我通常也不推荐您需要保留一组并行列表的程序设计。只需保留 1 个列表。创建某种类或其他东西来统一您的数据。
-
如果想通过
numpy做这样的工作,这里有一个很好的解决方案:stackoverflow.com/questions/4601373/…