Python字符串切片没有得到预期值



我正在尝试搜索字符串中子字符串的出现次数之和:

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)我们通过将结束索引添加到开始索引

来改变结束索引

最新更新