Вы также можете использовать collection.Counter :
from collections import Counter
List = [5,4,8,2,4,9,22,50,79,22,50,50,66,33,8,4]
print(Counter(List).keys()) # equals to list(set(List ))
print(Counter(List).values()) # counts the element's frequency
Вывод:
dict_keys([5, 4, 8, 2, 9, 22, 50, 79, 66, 33])
dict_values([1, 3, 2, 1, 1, 2, 3, 1, 1, 1])
Почему он показывает индекс списка вне диапазона Ошибка ?
Вы можете попытаться напечатать индекс, переданный в ваш список count
.
Проблема с вашей линией count = [0] * max(List)
.
Вам необходимо увеличить список count
на max(List) + 1
. Индексирование в Python (и во многих других языках программирования) начинается с 0. Я попытался запустить ваш код, и он потерпел неудачу при попытке доступа к 79-му индексу в вашем списке count
. 79 оказывается максимальным int в вашем списке List
, и его соответствующий индекс должен быть 79
. Однако, поскольку размер вашего count
списка был 79, его последний индекс будет 78 (так как индекс начинается с 0).
count = [0] * (max(List) + 1)
Я предполагаю, что у вас есть только positive integers
. Если у вас List
не будет 0 int, то вы также можете сделать это:
if count[List[i] - 1] == 0:
distinct_element_count += 1
count[List[i] - 1] += 1