我正在尝试搜索字符串中子字符串的出现次数之和:
string = 'ABCDCDC'
sub_string = 'CDC'
for i in range(len(string)-len(sub_string)):
print(string[i:len(substring)]
我不确定为什么这是我的输出:
ABC
BC
C
应该是:
ABC
BCD
CDC
DCD
CDC
当您在range()中传递一个数字时,您错过了两件事,它不包含该数字,因此您应该在该数字上添加1,并且您错过了在迭代中添加i,而切片此代码将为您工作。
string = 'ABCDCDC'
sub_string = 'CDC'
for i in range(len(string)-len(sub_string)+1):
print(string[i: i+ len(sub_string)])
您使用的是len(substring)
而不是i + len(substring)
。
string = 'ABCDCDC'
sub_string = 'CDC'
for i in range(len(string)-len(sub_string)+1):
print(string[i:i + len(sub_string)])
输出:
ABC
BCD
CDC
DCD
CDC
PS:使用range(len(string)-len(sub_string)+1)
使循环遍历所有可能的索引,包括最终索引。
您需要将长度增加i次以匹配len 3个元素,参见
string = 'ABCDCDC'
sub_string = 'CDC'
for i in range(len(string)-len(sub_string)):
print(f'{i} to {len(sub_string)}')
在你的例子中#
0 to 3
1 to 3
2 to 3
3 to 3
代码修正
string = 'ABCDCDC'
sub_string = 'CDC'
for i in range(len(string)-len(sub_string)):
print(string[ i:i + len(substring)]
print(f'{i} to {i+len(sub_string)}')
输出#0 to 3
1 to 4
2 to 5
3 to 6
你会得到
ABC
BCD
CDC
DCD
稍微改变一下就可以得到预期的输出
代码:
string = 'ABCDCDC'
sub_string = 'CDC'
for i in range(len(string)-len(sub_string)):
print(string[i: i+ len(sub_string)])
ABC
BCD
CDC
DCD
原因:
你可以尝试打印len(sub_string),看到它是常量3,因为length总是3。
string = 'ABCDCDC'
sub_string = 'CDC'
for i in range(len(string)-len(sub_string)):
print(i, len(sub_string))
输出:
0 3
1 3
2 3
3 3
我们做的修改是i+ len(sub_string)我们通过将结束索引添加到开始索引
来改变结束索引