3

我有一个整数百分比列表,需要使用以下模式打印:

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'

但是我不断收到错误代码:列表索引超出范围。

我根本不明白这一点,有人可以指出我做错了什么吗?

4

3 回答 3

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]是索引查找。

于 2011-11-02T18:44:12.847 回答
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)))
于 2011-11-02T18:44:50.520 回答
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]

以上两个做的事情大致相同。您在按顺序访问元素(第一种方法)与按顺序索引访问列表元素(第二种方法)之间混淆。

于 2011-11-02T19:38:26.707 回答