Python 随机洗牌多个列表

Python 随机洗牌多个列表,python,list,random,Python,List,Random,我在Python中有一组列表,我想洗牌这两个列表,但在两个列表中切换相同位置的元素,如 a=[11 22 33 44] b = [66 77 88 99] *do some shuffeling like [1 3 0 2]* a=[22 44 11 33] b = [77 99 66 88] 这可能吗?这里有一个使用列表理解的解决方案: >>> a = [11, 22, 33, 44] >>>

我在Python中有一组列表,我想洗牌这两个列表,但在两个列表中切换相同位置的元素,如

          a=[11 22 33 44] b = [66 77 88 99]
          *do some shuffeling like [1 3 0 2]* 
          a=[22 44 11 33] b = [77 99 66 88]

这可能吗?

这里有一个使用列表理解的解决方案:

>>> a = [11, 22, 33, 44]
>>> b = [66, 77, 88, 99]
>>> p = [1, 3, 0, 2]
>>>
>>> [a[i] for i in p]
[22, 44, 11, 33]
>>>
>>> [b[i] for i in p]
[77, 99, 66, 88]
>>>

您可以将
zip
random.shuffle
操作符配合使用:

a = [1,2,3,4]          # list 1
b = ['a','b','c','d']  # list 2
c = zip(a,b)           # zip them together
random.shuffle(c)      # shuffle in place
c = zip(*c)            # 'unzip' them
a = c[0]
b = c[1]
print a                # (3, 4, 2, 1)
print b                # ('c', 'd', 'b', 'a')

如果您想将a、b保留为列表,那么只需使用
a=list(c[0])
。如果您不想让他们覆盖原始的a/b,然后根据Tom的答案重新命名,如
a1=c[0]

展开,您可以轻松地制作p列表并按如下方式随机排列:

import random    
p = [x for x in range(len(a))]
random.shuffle(p)    
这适用于任何大小的列表,但我从您的示例中假设它们的大小都相同

汤姆的回答是:


下面是一个使用列表理解的解决方案:

>>> a = [11, 22, 33, 44]
>>> b = [66, 77, 88, 99]
>>> p = [1, 3, 0, 2]
>>>
>>> [a[i] for i in p]
[22, 44, 11, 33]
>>>
>>> [b[i] for i in p]
[77, 99, 66, 88]
>>>
a=[11,22,33,44] b=[66,77,88,99] p=[1,3,0,2]

[a[i]代表p中的i]

[22,44,11,33]

[b[i]代表p中的i]

[77,99,66,88]


您只需下订单,然后进行列表理解即可获得新列表

是的!您可以生成介于0和最长长度之间的随机数,并移动元素。但是你试过什么?