ソートするデータを準備するためにいくつかのコード行。これを行うために、リストの各項目をリストにする必要がありました。たとえば、私のリストが[a, b, c, d]
だった場合、リストは[[a], [b], [c], [d]]
になります。ここで、a、b、c、およびdは整数です。私のコードは、しかし[[d], [d], [d], [d]]
を返します。リストのすべての項目は同じですか?
len_of_list = random.randint(8500, 10000)
val_list = range(len_of_list)
list_one = [[-1]]
for index in range(0, len_of_list):
list_one[0][0] = val_list[index]
val_list[index] = list_one[0]
print val_list
コードに起こる奇妙な事は最後から2番目の行がval_list[index] = list_one[0][0]
に交換されたときに、それだけで[]
せずに正しい値を返すことです。したがって、私は最後の[0]
を取り除くと、それらの周りに[]
の値を返すと仮定しました。しかし、返されるのは、元々[]
で囲まれたリストの最後の整数で、の場合はすべての値です。これは、が毎回list[0][0] = val_list[index]
でリセットされるために発生しません。
なぜリストは[[a], [b], [c], [d]]
の代わりに[[d], [d], [d], [d]]
として返されますか。もちろんリストには少なくとも8500の固有の整数がありますが、d
はリストの最後の値を表します。単純にd = val_list[len(val_list) - 1]
となります。
あなたは同じリストのオブジェクトを再利用し続ける、あなたの代わりに* *コピーを作成したいと思います。 –
Martijnの簡単な答えを広げる。外側のリストには* 1 *リストへの参照が8500件あります(これは繰り返し変更されています)。 –
http:// pythontutorのコードを実行してください。com(短いリストで)あなたは何が起こっているか見るでしょう。 – furas