0
次のコードでは、小文字のアルファベットの数を格納して、cnt[char][i + 1]
に文字 '文字'の数を文字列の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)
しかし、出力は、彼らが最初にゼロで満たされているとしてリストが変更取得されていない、とさえループの後、彼らは変更されませんことを示しています。
なぜそれが起こっているのか、またどのように出力するのかを理解できません。
'[[0] *(N + 1)] * 26' **同じリストに26個の参照を行います。 –
@WillemVanOnsemありがとう、今私は問題を理解しています。しかし、どのようにすべてのキーが同じリストを参照しないように上記の辞書を初期化する必要があります。 – tonystark