Как создать массив из 10 цифр для подсчета повторений? - PullRequest
0 голосов
/ 13 декабря 2011

Мне было интересно, как создать массив из 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 ]

6 голосов
/ 13 декабря 2011
>>> 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 для простой итерации списка.

3 голосов
/ 13 декабря 2011

Возможно, стоит использовать dict вместо list для хранения ваших итогов.Затем вы можете использовать defaultdict из 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
1 голос
/ 13 декабря 2011

Вы можете использовать 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
0 голосов
/ 13 декабря 2011

Здесь вы можете найти, как вы можете реализовать подсчет сортировки в python: http://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Counting_sort#Python

...