坚持这个问题。我有列表[6,7,7,8,10]
。我需要制作如下图。
6 *
7 **
8 *
9
10 *
答案 0 :(得分: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))
。
答案 1 :(得分: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 *
答案 2 :(得分:0)
这应该适用于未排序的列表:
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!
答案 3 :(得分: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