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