Python字符数

时间:2010-06-02 02:47:02

标签: python

我已经在这个resource中阅读了python教程。以下代码中的所有内容都非常清楚,它会计算字符数。只有我不理解的部分是计数分配到列表并乘以120的部分。任何人都可以用简单的英语解释这个目的是什么。

def display(i):
    if i == 10: return 'LF'
    if i == 13: return 'CR'
    if i == 32: return 'SPACE'
    return chr(i)

infile = open('alice_in_wonderland.txt', 'r')
text = infile.read()
infile.close()

counts = 128 * [0]

for letter in text:
    counts[ord(letter)] += 1

outfile = open('alice_counts.dat', 'w')
outfile.write("%-12s%s\n" % ("Character", "Count"))
outfile.write("=================\n")

for i in range(len(counts)):
    if counts[i]:
        outfile.write("%-12s%d\n" % (display(i), counts[i]))

outfile.close()

3 个答案:

答案 0 :(得分:6)

128 * [0]创建一个包含128个元素的列表,每个元素的值为0.

>>> 3 * [0]
[0, 0, 0]

然后,由于有效的ASCII字符在0-127范围内,因此每个字母都以计数方式访问索引(ord(letter)将返回字符的数值),并递增该索引处的值。

例如,字符'0'对应于数值48.因此,当遇到'0'时,counts[48]会增加1.

答案 1 :(得分:3)

正如其他答案所解释的那样,它会创建一个包含0的128个列表。他们没有解释的是,它是相同的 0 128次。由于int是不可变的,这掩盖了许多新手Python程序员遇到的问题:

>>> l = [[]] * 5
>>> l
[[], [], [], [], []]
>>> l[0].append(1)
>>> l
[[1], [1], [1], [1], [1]]

答案 2 :(得分:1)

counts = 128 * [0]行用零填充128个元素的列表。

此列表用于根据每个字符的ascii值递增字符计数,因为ascii值的范围为0到127.