随机shuffle多列表python

时间:2016-04-18 13:00:29

标签: 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]

这可能吗?

4 个答案:

答案 0 :(得分:2)

这是一个使用列表推导的解决方案:

>>> 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]
>>>

答案 1 :(得分:2)

您可以与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,请重命名为a1=c[0]

答案 2 :(得分: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]

答案 3 :(得分:0)

a=[11,22,33,44]
order = [1,0,3,2]                     #give the order
new_a = [a[k] for k in order]    #list comprehension that's it

您只需下订单,然后执行列表理解以获取新列表