提问人:Francesco Gregotti 提问时间:11/8/2023 最后编辑:Francesco Gregotti 更新时间:11/8/2023 访问量:65
Pyhton find() 函数的意外结果
Unexpected results from Pyhton find() function
问:
我有这个字符串
string = "DLR1=A,B,C,D,E,F,G|DLR2=A,B,C,D,E,F,G|DLR=A,B,C,D,E,F,G|"
我想找到 DLR、DLR1 和 DLR2 的索引。
但是,当我使用 Python find() 函数时,我没有像预期的那样获得 3 个不同的索引。
据我了解,该函数查找我的子字符串(DLR、DLR1、DLR2)的第一个出现项并返回索引。
如果这是真的,我不明白为什么 DLR 和 DLR1 具有相同的起始索引,而 DLR2 具有不同的起始索引。
我试过什么
运行此代码时:
string = "DLR1=A,B,C,D,E,F,G|DLR2=A,B,C,D,E,F,G|DLR=A,B,C,D,E,F,G|"
print(string.find('DLR'))
print(string.find('DLR1'))
print(string.find('DLR2'))
输出:
0
0
19
我发现这输出了预期的结果:
print(string.find('DLR='))
print(string.find('DLR1='))
print(string.find('DLR2='))
输出:
38
0
19
我的问题是为什么会发生这种情况,这是意料之中的吗?
编辑:
@slothrop给出了一个很好的解释
string[0:3] 是 'DLR',string[0:4] 是 'DLR1'。所以 string.find('DLR') 和 string.find('DLR1')' 都给出 0。但是没有 n,因此 string[0:n] 是 'DLR2',所以 string.find('DLR2') 不能是 0
答:
0赞
HoliSimo
11/8/2023
#1
因为“DLR”是“DLR1”的子字符串。在此方案中,DLR1 是第一个出现的,因此查找操作将为“DLR1”和“DLR”返回 0。“DLR”在本文中出现了三次!
您应该尝试找到以下字符串:“DLR=”、“DLR1=”、“DLR2=”,它应该可以工作!
1赞
Karine Bauch
11/8/2023
#2
str.find() 有什么作用
find() 方法查找指定值的第一个匹配项,如果未找到该值,则返回 -1。
返回字符串中子字符串 sub 位于切片 s[start:end] 中的最低索引。可选参数 start 和 end 被解释为切片表示法。如果未找到 sub,则返回 -1。
在第一个代码段中:
DLR
位于索引 0 处(因为它是DLR1
)DLR1
也处于索引 0DLR2
在索引 19
在第二个代码段中:
DLR=
在索引 38DLR1=
在索引 0 处DLR2=
在索引 19
评论
string.find('DLR')
DLR
string[0:3]
是 ,并且是 。所以两个 string.find('DLR1')' 都给出 0。但是没有这样的 ,所以不能是 0。'DLR'
string[0:4]
'DLR1'
string.find('DLR') and
n
string[0:n]
'DLR2'
string.find('DLR2')