2017-12-21 19 views
-2

を栽培:list.insert(位置、値)は、リストに無期限

data = list() 
length = 10 

for i in range(1000): 
    point = i % length 
    data.insert(point, i) 

len(data) 

出力されています:1000年

私はポイントを制限していて長さが10であることを期待していました範囲0-9になるようにします。

私は間違っていますか?

+1

'list.insert'はしません*指定されたインデックスにあるアイテムの*置換*。それは*新しい項目を挿入し、1つのスロットを "ダウン"した後にすべてをプッシュします。 – jonrsharpe

+0

'insert' *は新しい項目を挿入します。 'data [i] =' *は*に置き換えられます。 – deceze

答えて

1

挿入は、古いものを上書きし、新しい位置に要素を追加するには、代わりにこれを試してみてください。

length = 10 
data = [None] * length 

for i in range(1000): 
    point = i % length 
    data[point] = i 

len(data) 
=> 10 

あなたがループのみ、最後の10の値が必要とされている1000倍にしたいなぜそれが明確ではないですが... Wouldn range(990, 1000)を使用する方が良いですか?

+0

あなたの例は10回のループの後に 'IndexError'を持っています。あなたは 'ポイント'ではなく 'i'(非還元)に索引付けされます(' i'は適切な範囲内に縮小されます)。 – ShadowRanger

+0

今日は修正されました –

関連する問題