Python 字符计数
我在这个资源上学习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。