今夜、ちょっとしたコードを書いていたとき、私はそれが私を止めることはありませんが、それを理解することができなかったために私の注意を引いたという問題に出くわしました. だからここに私が書いた関数があります(それを行うための最適な方法ではないはずですが、気にしないでください...)
def ownShuffle( origin ):
export = [[] for i in range( len( origin ) ) ]
indices = range( len( origin ) )
for n, item in enumerate( origin ):
i = random.randrange( len( indices ) )
export[indices[i]] = item
indices.remove(indices[i])
return export
次のようなテストサンプルを使用します。
c = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
問題の部分があります。ほぼ同じコードで異なる結果が得られます。これを書く場合:
for i, line in enumerate(c):
c[i] = ownShuffle(line)
print c
>>> [[3, 2, 1],
[6, 4, 5],
[7, 8, 9]]
シャッフルされたリストを取得します。ただし、次のコードを使用します。
for i, line in enumerate(c):
line = ownShuffle(line)
print c
>>> [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
テストサンプルを変更せずに取得します。おそらくそれは私が書いた関数から来ていますか?何も思いつきません...
だから私の質問があります:誰かが理由を知っていますか?
ありがとうございました :)