我有一个整数百分比列表,我需要使用以下模式打印:
The index of a value, a tab (8 spaces), a '*' printed for each percentage point
如果索引的值为0,则打印'小于1%'
我试过这段代码:
for b in new_tally:
if b > 0:
print new_tally[b], \t, '*' * b
else:
print 'Less than 1% of words had this length'
但是我一直收到错误代码:列表索引超出范围。
我根本不理解这一点,有人能指出我做错了吗?
答案 0 :(得分:5)
我认为您想要的代码是:
>>> new_tally = [5, 7, 8, 6, 4, 2]
>>> for i, b in enumerate(new_tally, 1):
print i, ':', b, '*' * b
1 : 5 *****
2 : 7 *******
3 : 8 ********
4 : 6 ******
5 : 4 ****
6 : 2 **
原始回溯的原因是使用方括号而不是括号查找列表成员。 new_tally(i)
是函数调用。 new_tally[i]
是一个索引查找。
答案 1 :(得分:0)
for key,val in new_tally.iteritems():
print('{k} {a}'.format(k=key,a='*'*int(val)))
或者,如果您希望直方图按频率的降序排序:
import operator
for key,val in sorted(new_tally.items(),key=operator.itemgetter(1),reverse=True):
print('{k} {a}'.format(k=key,a='*'*int(val)))
答案 2 :(得分:0)
第一篇:
new_tally = [5, 7, 8, 6, 4, 2]
for b in new_tally:
print b
第二篇:
new_tally = [5, 7, 8, 6, 4, 2]
for i in range(len(new_tally)):
print i, new_tally[i]
以上两个大致相同的事情。你在顺序访问元素之间混合(第一种方法)与通过顺序索引访问列表元素(第二种方法)。