Закрепленный этой проблемой. У меня есть список [6,7,7,8,10]
. Мне нужно сделать диаграмму, как показано ниже.Изготовление гистограммы из списка
6 *
7 **
8 *
9
10 *
Закрепленный этой проблемой. У меня есть список [6,7,7,8,10]
. Мне нужно сделать диаграмму, как показано ниже.Изготовление гистограммы из списка
6 *
7 **
8 *
9
10 *
data = [6, 7, 7, 8, 10]
for item in range(min(data), max(data) + 1):
print item, data.count(item) * '*'
Выход:
6 *
7 **
8 *
9
10 *
если список отсортирован, и вы хотите только диаграмму для чисел от первого до последнего.
a = [6, 7, 7, 8, 10]
for i in range(a[0], a[-1] + 1):
print(i, sum([ k==i for k in a])*'*')
для этой работы на несортированном списке заменить a[0]
на min(a)
и a[-1]
по max(a)
.
Если вы не хотите печатать нулевые записи, замените объект range
на sorted(set(a))
.
Это должно работать на несортированном список Aswell:
l = [6,7,7,8,10]
for i in range(min(l), max(l) + 1):
print("%d: %s " % (i, '*' * l.count(i)))
Выход:
6: *
7: **
8: *
9:
10: *
Попробуйте here!
Вы можете работать со словарями для выполнения этой задачи;
a=input()
d={}
# this function is used to generate the dictionary for your hitogram
def histogram(a):
for i in a:
try:
d[i]=d.get(i)+1
except:
d[i]=1
# to display the histogram
def display(d):
x=d.keys()
x.sort()
for i in x:
print i,'*'*d[i]
Теперь проверка времени исполняющего:
import time
t=time.time()
a=[6,7,7,8,10]
d={}
def histogram():
for i in a:
try:
d[i]=d.get(i)+1
except:
d[i]=1
histogram()
t1=time.time()
print t1-t
>>> 4.6968460083e-05
отсортированные значения? Какова ваша собственная попытка? –