2017-10-30 4 views
-1

リストにあるさまざまな書籍のコピー数を [10,14,12,16,42,23]として保存したいとします。ここで最初の要素、すなわちindex[0]は最初の本は10部、第2の書籍(index[1])は14部のコピーを持っています。しかし問題は、どのくらい多くの種類の本が存在するか、私は知らないということです。すなわち、リストの要素の総数は不明です。私は以下のように空のリストを作成したように:その後要素の数がわからないときに、リストにゼロを割り当てる方法

li = [] 

を私はループのために、私は次のようにリストの要素を追加して更新する各反復で実行します。

for x in range(5): 
    li[x] = li[x] + 1 

しかし、私は次のエラーが表示されます。 li[x] = li[x] + 1 IndexError: list index out of range li[x]には0または任意の値が割り当てられていません。私の質問は、要素の数がわからなくて、リスト要素を動的に追加しているときに、リストをゼロで割り当てる方法です。私の要求を達成するためのアプローチを提案してください。

+2

'collections.Counter' /' collections.defaultdict(int)を使用し 'オブジェクト、あなたがやろうとしているように自動的にインクリメントすることができるはずにzeroを追加しておきます。 –

+0

@cᴏʟᴅssolution解決していただきありがとうございます。それは私のために完璧に動作します。私はコレクションを使用しています。 –

答えて

1

リストに値として0を割り当てることができます。 あなたは試すことができます:

>>> for x in range(5): 
     li.append(0) 

>>> print li 
[0, 0, 0, 0, 0] 

>>> for x in range(5): 
     li[x] = li[x] + 1 

>>> print li 
[1, 1, 1, 1, 1] 
+0

実際に私は多数の要素で作業しています。その場合、ループを2回実行するのは非効率的です。しかし、ソリューションに感謝します。 –

+0

@harshaコレクションカウンタは、このシナリオの正しい解決策になります。まだOPを理解するためのupvote –

0

はこれを試してみてください:ので、すべてあなたが行うことができますが、サイズがわからないので

> li = [0, 0, 0, 0] 

> li = [0] * 5 

これは次のようになりますかliですリストを作成することです。

> li = [] 

と、いくつかの条件の後に、それ

> if condition: 
    li.append(0) 
+0

私はすでにその要素の数がforループの前に未知であることを言及しました。 –

関連する問題