当我使用 Python 查找子字符串时,我不明白为什么会发生这种情况

When I use Python to find substring, I can't understand why this happens

提问人:YksYiZov 提问时间:11/13/2023 最后编辑:FObersteinerYksYiZov 更新时间:11/13/2023 访问量:76

问:

str1 = "E2ab"
str2 = "E2"
if str1.find(str2):
    print("find it")

我以为它会打印“找到它”,但实际上,它不会。为什么?

Python 版本为 3.8。

我做了 encoding=utf-8,但它仍然不起作用。

python 字符串 if-statement

评论

4赞 FObersteiner 11/13/2023
如果 str1 以您要搜索的内容 (str2) 开头,则 str1 中 str2 的索引为 0,因此该语句的计算结果为 false,并且 if 块不会执行。if
1赞 jonrsharpe 11/13/2023
并且是真值,所以它会“找到”实际上不在 中的值。用。-1str2str1str2 in str1
2赞 trincot 11/13/2023
因为对比赛的位置不感兴趣,所以只对有没有比赛感兴趣,所以做if str2 in str1:

答:

1赞 Mureinik 11/13/2023 #1

find返回可以找到的位置的索引。在本例中,正好出现在 的开头,因此返回。 是 false-y,因此不满足条件。您可以显式检查返回的索引是否为非负数:str1str2str2str100if

if str1.find(str2) >= 0
1赞 Bruno 11/13/2023 #2

发生这种情况是因为 Python 中 find 方法的返回值。如果在字符串中找到子字符串,则 find 方法返回子字符串的最低索引。如果未找到,则返回 -1。

在本例中,str1.find(str2) 返回 0,因为子字符串“E2”从字符串“E2ab”中的索引 0 开始。在 if 语句中使用它时,在布尔上下文中将 0 视为 False。除 0 以外的任何数字都被视为 True。

str1 = "E2ab"
str2 = "E2"
if str1.find(str2) != -1:
    print("find it")

这将打印“find it”,因为您正在显式检查 find 方法是否在 -1 以外的索引处找到了子字符串。

-1赞 Lourenço Monteiro Rodrigues 11/13/2023 #3

String.find()返回子字符串第一次出现的索引,如果未找到子字符串,则返回 -1。在本例中,返回是因为子字符串从该索引开始,并且 if 语句将零计算为 false。对于 sedired 行为,您可以使用 或0string2 in string1string1.contains(string2)