如何创建一个10位数组来计算重复次数?

时间:2011-12-13 13:19:42

标签: python arrays list flags digits

我想知道如何创建一个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元素上倒退) 但我收到错误“列表索引必须是整数,而不是列表”。

提前致谢!

4 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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 :(得分:-1)

在这里,您可以找到如何在python中实现计数排序:http://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Counting_sort#Python

相关问题