2017-02-12 14 views

ответ

0
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 * 
1

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

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)).

0

Это должно работать на несортированном список 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!

0

Вы можете работать со словарями для выполнения этой задачи;

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