Подсчет различных элементов диапазона в списке - PullRequest
0 голосов
/ 11 января 2020

У меня есть список оценок от 1 до 100.

Мне нужно найти следующее решение в PYTHON

0-10   0
10-20  5 *****
30-40  7 *******
40-50  8 ********

И так до 100. 0 -10 не имеет экземпляров в списке. Число и * представляют количество оценок в категории в списке.

Мне сказали сначала создать список из общего количества оценок по количеству, а затем работать с таблицей позже.

Я должен использовать для l oop.

Я пробовал все разные коды, но не могу создать список. Я не могу получить код для добавления в экземпляры без индивидуального перечисления экземпляров.

Это то, что у меня есть до сих пор

data = [90,30,13,67,85,87,50,45,51,72,64,69,59,17,22,23,
        44,25,16,67,85,87,50,45,51,72,59,14,50,55,32,23,
        24,25,37,28,39,30,33,35,40,34,41,43,94,95,98,99,
        44,45,47,48,49,53,61,63,69,75,77,60,83]

total=0
myList=[]
for grade in data:
myList.append(grade>=10)
data.append(0)
for grade in data(len(myList)):
 total=+1
 elif(grade>10 and grade<20): 
 myList.append(len(grade))
 total=+1
 print(myList)

Любая помощь, пожалуйста. Я очень новичок в этом.

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Python делает большие успехи благодаря своим великолепным библиотекам.

Не изобретайте колесо, используйте Counter из стандартной библиотеки.

from collections import Counter

cnt = Counter(d//10 for d in data)
for k, n in sorted(cnt.items()):
    print(f"{k*10}-{k*10+9} {n} {'*'*n}")

который производит

10-19 4 ****
20-29 7 *******
30-39 8 ********
40-49 11 ***********
50-59 9 *********
60-69 8 ********
70-79 4 ****
80-89 5 *****
90-99 5 *****

Примечание: для Counter мы передаем выражение генератора, которое избегает ненужного создания другого списка

0 голосов
/ 11 января 2020

Так как вы начинающий, вот подробное решение в Python:

Сначала создайте список со значениями 0-10, с 0 для 0-9 классов, 1-9 для 10 классов -99 и 10 для класса 100. Для этого мы выполняем деление по полу // класса с 10.

d = []
for grade in data: 
    d.append(grade // 10)

То же самое можно сделать, используя понимание списка :

d = [grade // 10 for grade in data]

Далее подсчитывает вхождения каждого значения в d, используя метод count(). Мы можем создать для этого еще один список (опять же, используя понимание списка):

gc = [d.count(i) for i in range(11)]

И, наконец, вывести результаты:

print('0-9'  , gc[0], '*'*gc[0])
print('10-19', gc[1], '*'*gc[1])
print('20-29', gc[2], '*'*gc[2])
print('30-39', gc[3], '*'*gc[3])
...

Вывод:

0-9 0 
10-19 4 ****
20-29 7 *******
30-39 8 ********
...
...