我已经在这个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()
答案 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.