我试图构建一个函数,它将字符串和数字k作为输入,并返回一个字典,其字符串是原始字符串中长度为k的字符串,每个键的值是一个序列字符串出现的索引。
运行示例:
<<< hash_sequence("byebyeboy",3 (
{ 'yeb': [1, 4], 'boy': [6], 'bye': [0, 3], 'ebo': [5], 'eby':
[2] }
这是我的代码:
def hash_sequence(string, k):
dictionary={}
for i in range(len(string)):
dictionary[i:i+3]=[i]
if dictionary[i:i+3] in dictionary:
dictionary[i:i+3]+=[1]
return dictionary
答案 0 :(得分:6)
哦,我知道你正在尝试做什么 - 切片字符串。错误的语法。
dictionary[i:i+3]=[i]
应该是
dictionary[string[i:i+3]]= [i]
同样if dictionary[i:i+3] in dictionary:
变为if string[i:i+3] in dictionary:
,依旧等等。
老实说,你这样做会让代码变得非常混乱。如果您使用setdefault
(并修复其他一些错误),情况会更清楚:
def hash_sequence(s, k=3):
dictionary={}
for i in range(len(s) - k + 1):
triplet = s[i:i+k]
dictionary.setdefault(triplet,[]).append(i)
return dictionary
hash_sequence('byebyeboy')
Out[28]: {'boy': [6], 'bye': [0, 3], 'ebo': [5], 'eby': [2], 'yeb': [1, 4]}