0

4 つの要素のリストを繰り返しシャッフルし、シャッフルされたリストを成長するリストに追加しようとしています。結果は、長さが 4 要素の倍数であるリストになり、4 つの要素ごとに元のリストの組み合わせになります。

私のコードは

import random
list1 = ['X','Y','Z','Q']
list2 = []
for drop in range(0,72/4):
     random.shuffle(list1)
     list2.append(list1)

私が抱えていると思われる問題は、list2 が list1 の同じシャッフルされたバージョンになることです。

例 list2: ['Q','X',Z','Y','Q','X',Z','Y','Q','X',Z','Y',. ..]

4

3 に答える 3

5

書きたかったんだと思う

list2.extend(list1)

そうしないと、オブジェクト list1 の同じインスタンスを list2 に何度も追加することになります。

于 2012-04-13T15:38:37.133 に答える
2

リストを別のリストに追加するとき、そのリストのコピーを作成しているのではなく、元のリストに別の参照を追加していることになります。追加しようとする試みはすべて、実際には同じオブジェクトへの参照であり、1 つを変更するとすべてが変更されます。

これは、この驚くべき結果のデモンストレーションです。

>>> list1 = ['X', 'Y', 'Z', 'Q']
>>> list2 = []
>>> list2.append(list1)
>>> list2.append(list1)
>>> list2
[['X', 'Y', 'Z', 'Q'], ['X', 'Y', 'Z', 'Q']]
>>> list2[0][0] = 'A'
>>> list2
[['A', 'Y', 'Z', 'Q'], ['A', 'Y', 'Z', 'Q']]
>>> list1[0] = 'B'
>>> list2
[['B', 'Y', 'Z', 'Q'], ['B', 'Y', 'Z', 'Q']]
于 2012-04-13T15:53:43.487 に答える
0

list1 をその場でシャッフルすると、list1 のすべてのインスタンスがシャッフルされます。list1 を list2 に追加すると、同じリストを何度もシャッフルするだけです。

ディープコピーを使ってみる

import random, copy
list1 = [1,2,3,4]
list2 = []
for i in xrange(10):
    random.shuffle(list1)
    list2.append(copy.deepcopy(list1))
于 2012-04-13T15:41:11.843 に答える