私は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]
のように両方のリストに同じ位置にある要素を切り替えることは可能、このですか?
私は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]
>>>
あなたは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]
のように名前を変更してください。トムの答えにより拡大
、簡単に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]
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
あなただけのオーダーを与え、その後、新しいリストに
を取得するには、リスト内包表記を行いますはい、そうです! 0と最長の長さの間の乱数を生成し、要素を移動することができます。しかし、何を試しましたか? – Llopis