Python 字符计数

0 投票
3 回答
2284 浏览
提问于 2025-04-15 23:26

我在这个资源上学习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 个回答

1

这一行代码 counts = 128 * [0] 创建了一个包含128个零的列表。

这个列表接下来用来根据每个字符的ascii值来增加字符的计数,因为ascii值的范围是从0到127。

3

正如其他回答所说,这段代码创建了一个包含128个0的列表。但他们没有解释的是,这128个0其实是同一个0,重复了128次。因为int(整数)是不可变的,这就掩盖了许多初学Python的程序员会遇到的问题:

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

128 * [0] 这段代码会创建一个包含128个元素的列表,每个元素的值都是0。

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

接下来,由于有效的ASCII字符范围是0到127,每个字母都会通过索引访问这个counts列表(ord(letter)会返回一个字符对应的数字值),并在那个索引的位置上加1。

举个例子,字符'0'对应的数字值是48。所以当遇到一个'0'时,counts[48]的值就会加1。

撰写回答