2016-10-12 41 views
-1

我在列表变量中有五个元素(称之为A)。我想表示这五个元素的每个可能的顺序,每个顺序都作为一个列表存储在另一个列表中(称为B)。如果我将A附加到B然后尝试重新洗牌A以获得新订单,则先前存储在B中的列表也将被分配给A,因此在试图产生A的五个元素的25个不同顺序之后,I在B中获得25个同样的订单。有没有一种方法可以将A添加到B中,然后在不洗牌B中的附加A的情况下洗牌A?如何将列表转储到列表中而不是追加它Python

以下是基本代码:


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

在第四行上,B.append(temp)意味着在一个新行上。 – fevrierm

+1

'T'('print(T)')? –

+4

'from itertools import permutations \\ B = list(permutations(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

为什么你使用'deepcopy'而不是'copy'? –

+0

你是对的,在这种情况下更好地使用副本。谢谢。我编辑了答案 –

2

我要代表为每一个订单被存储在另一个列表的列表中的那些五行每一个可能的顺序。

假设这是一个XY problem,让我们退一步考虑:洗牌的找到所有排列的正确方法。

有是做所有的这一步标准库解决方案(在评论中已经提及):

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

注意它返回的元组名单,这应该是罚款您意图和目的。如果需要,您可以使用列表理解将它们转换为列表。