2016-10-12 7 views
-1

リスト変数に5つの要素があります(それをAと呼びます)。私は、各注文が別のリストにリスト(Bと呼ぶ)として格納されている5つの要素のすべての可能な順序を表現したいと思います。 AをBに追加してAを再シャッフルして新しい注文を得ると、Bに以前に保存されたリストもAに割り当てられているのでシャッフルされるので、Aの5つの要素の25の異なる注文を生成しようとした後、 Bで同じ順序の25を取得する方法はありますか?BにAを追加して、Bに追加されたAをシャッフルせずにAをシャッフルする方法はありますか?リストをリストを追加するのではなくリストにダンプする方法


from random import shuffle 

A = ["M1", "M2", "M3", "M4", "M5"] 

B = [] 

for i in range(len(A) * 5): 
    shuffle(A) 
    temp = A 
    B.append(temp) 


print (T) 

おかげ

+0

4行目で、B.append(temp)は改行されています。 – fevrierm

+1

'T'(' print(T) ')とは何ですか? –

+4

'from itertoolsインポート順列\\ B =リスト(順列(A))'? – Efferalgan

答えて

-1

コピーまたはdeepcopyを使用する必要があります。ここでは

は、基本的なコードです。

from copy import deepcopy, copy 
from random import shuffle 

A = ["M1", "M2", "M3", "M4", "M5"] 

B = [] 
# Use deep deepcopy if you have lists with lists e.g. [[12, [2]], [2]] 
for i in range(len(A) * 5): 
    shuffle(A) 
    B.append(deepcopy(A)) 
# But in this case better to use copy() 
C = [] 
for i in range(len(A) * 5): 
    shuffle(A) 
    C.append(copy(A)) 
+1

なぜ単に 'copy'だけではなく' deepcopy'を使うのですか? –

+0

あなたが正しいです、この場合コピーを使う方が良いです。ありがとうございました。私は答えを編集した –

2

私はリストとして別のリストに格納されている各順序でそれらの5つの要素のために可能なすべての順序を表現したいです。これはXY problemであると仮定すると、

、背中のステップと考えてみましょう:シャッフルはないすべての順列を見つけるための正しい方法です。

ワンステップでこのすべてを行う標準ライブラリソリューション(すでにコメントで参照)があります:あなたのための罰金である必要があり、これはタプルのリストを返すこと

>>> from itertools import permutations 
>>> list(permutations(["M1", "M2", "M3", "M4", "M5"])) 
[('M1', 'M2', 'M3', 'M4', 'M5'), ...] # and off to the races... 

注、意図と目的。必要に応じてリスト内包表記を使用してリストに変換することができます。

関連する問題