列表中没有更新的列表

时间:2017-11-09 18:16:22

标签: python python-3.x list dictionary

在下面的代码中,我试图存储每个小写字母的计数,以便在cnt[char][i + 1]给出字母'char'的计数,直到字符串中的第i个字符。

import string
s = 'abcdabcd'
n = len(s)
cnt = dict(zip(string.ascii_lowercase, [[0] * (n + 1)] * 26))
print('Before')
print(cnt)
for i in range(n):
    for char in string.ascii_lowercase:
        cnt[char][i + 1] = cnt[char][i] + (1 if char == s[i] else 0)
print('After')
print(cnt)

但是,输出显示列表没有被修改,因为它们最初用零填充,即使在循环之后,它们也不会被修改。

我无法理解为什么会发生这种情况以及如何获得所需的输出。

1 个答案:

答案 0 :(得分:0)

使用新列表创建您的词典:

import string
s = 'abcdabcd'
n = len(s)
cnt = dict(zip(string.ascii_lowercase, [[0 for _ in range(n + 1)] for __ in range(26)]))
print('Before')
print(cnt)
for i in range(n):
    for char in string.ascii_lowercase:
        cnt[char][i + 1] = cnt[char][i] + (1 if char == s[i] else 0)
print('After')
print(cnt)