2016-04-18 8 views
-3

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

のように両方のリストに同じ位置にある要素を切り替えることは可能、このですか?

+1

を取得するには、リスト内包表記を行いますはい、そうです! 0と最長の長さの間の乱数を生成し、要素を移動することができます。しかし、何を試しましたか? – Llopis

答えて

1

は、ここでリストの内包表記を使用してソリューションです:

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

あなたはrandom.shuffleオペレータと協調してzipを使用することができます:あなたがリストとして、Bを保持したい場合は、単に、その後、

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=list(c[0])を使用してください。元のa/bを上書きしたくない場合は、a1=c[0]のように名前を変更してください。トムの答えにより拡大

0

、簡単にPリストを作成し、このようにそれをランダム化することができます

import random  
p = [x for x in range(len(a))] 
random.shuffle(p)  

これは、任意のサイズのリストのために動作しますが、私は彼らがすべて同じだとあなたの例から想定していますサイズで。

トムの答え:

ここでリストの内包を使用する溶液は次のとおり

= [11、22、33、44] B = [66、77、88、99] P = [Pにおける[i]はiについて] [1、3、0,2]

[22、44、11、33]

[Pにおけるi]は私のために[B] [77、99、66、88]

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 

あなただけのオーダーを与え、その後、新しいリストに

関連する問題