2011-12-13 17 views
-1

我想知道如何創建的10個數字,這樣每一個號碼的數字表示時間的是,它增加其匹配代替10位陣列中,一個這樣的數組:如何創建一個10位數的數組來重複計數?

digits=[0,0,0,0,0,0,0,0,0,0] 
num_digits=[1,2,3,9,1] 

和數字變爲:

digits=[0,2,1,1,0,0,0,0,0,1] 

我想:

digits[num_digits[j]]=digits[num_digits[j]]+1 

(j向後推移對NUM_DIGITS元素) ,但我得到了錯誤「列表索引m最好是整數,而不是列表「。

在此先感謝!

+0

看來'j'某種程度上是一個列表,而不是一個整數。顯示定義'j'的代碼。 –

+0

@Sven j = len(num_digits)-1 – winuall

+1

有了這個'j'的定義,[沒有錯誤](http://ideone.com/KneYn)。 –

回答

6
>>> digits=[0,0,0,0,0,0,0,0,0,0] 
>>> num_digits=[1,2,3,9,1] 
>>> for d in num_digits: 
...  digits[d] += 1 
... 
>>> digits 
[0, 2, 1, 1, 0, 0, 0, 0, 0, 1] 

對於列表的簡單迭代,我們不需要變量j

1

您可以使用collections.Counter該任務如下:

from collections import Counter 

num_digits=[1,2,3,9,1] 
digits = [0]*10 
for key, value in Counter(num_digits).items(): 
    digits[key] = value 
3

它可能使用dict價值,而不是list存儲您的總計。然後,您可以使用defaultdict from collections創建dict它會自動建立一個零int新密鑰的條目:

>>> from collections import defaultdict 
>>> digits = defaultdict(int) 
>>> num_digits = [1,2,3,9,1] 
>>> for d in num_digits: 
...  digits[d] += 1 
... 
>>> digits 
defaultdict(<type 'int'>, {1: 2, 2: 1, 3: 1, 9: 1}) 
>>> digits[1] 
2 
>>> digits[8] 
0 
+0

我肯定會推薦這個使用字典而不是列表 – Exelian

相關問題