2017-02-02 2 views
0

シャッフルを使用してリストの内容を並べ替えます。最初の反復は期待どおりに機能し、元のリストの置換を生成します。しかし、2回目以降の反復では、ファイルに同じ順列が書き込まれます。なぜコードは進行中の反復で別の順列を生成しないのですか? 64、shuffleは次のコードで2回目以降の繰り返しと同じ順列を生成するのはなぜですか?

[1024 64、512、512、128、64、2048、64、512、1024]、[1024:

import random; 

f = open('GenerationNumbers.txt', 'w') 

request = [ 128, 
      512, 
      2048, 
      512, 
      64, 
      64, 
      512, 
      1024, 
      1024, 
      64, 
      ] 

#server 
server = [ 4096, 
      2048, 
      2048 
     ] 

newrequest = [] 
newserver = [] 

for i in range(0, 30): 
    random.shuffle(request) 
    newrequest.append(request) 
    random.shuffle(server) 
    newserver.append(server) 


f.write(str(newrequest)+"\n") 
f.write(str(newserver)) 
f.flush() 
f.close() 

以下では、出力ファイルの一部であります1024、64、512、512、128、1024、64、512、128、64、204、204、64、512、1024] [1024、64、512、512、128、64、204、512、128、64、2048、64、512、1024] ...

[[2048、4096、2048] [2048,4096,2048]、[2048,4096,2048]、[2048,4096,2048]、[2048,4096,2048]、[2048,4096,2048]、[2048,4096,2048]、[2048] 、4096,2048]、[2048,4096、 [2048、4096、2048]、[2048,4096,2048]、[2048,4096,2048]、...

答えて

5

同じリストへの参照を何度も繰り返して追加していますが、それらを適所にシャッフルします。異なるオーダーのリストを別々に保管したい場合は、各反復ごとにリストをコピーする必要があります。

あなたはこのようにそれを行うことができます:

for i in range(0, 30): 
    random.shuffle(request) 
    newrequest.append(request[:]) 
    random.shuffle(server) 
    newserver.append(server[:]) 
関連する問題