我在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]
这可能吗?
答案 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
您只需下订单,然后执行列表理解以获取新列表