Python 如何在.find方法中使用或?

Python 如何在.find方法中使用或?,python,string,Python,String,因此,我正在运行一个代码,希望在其中查找“a”或“b” 这返回-1: string = 'b' i = string.find('a' or 'b') print(i) string = 'b' i = string.find('a') or string.find('b') print(i) 这也返回-1: string = 'b' i = string.find('a' or 'b') print(i) string = 'b' i = string.find('a') or stri

因此,我正在运行一个代码,希望在其中查找“a”或“b”

这返回-1:

string = 'b'
i = string.find('a' or 'b')
print(i)
string = 'b'
i = string.find('a') or string.find('b')
print(i)
这也返回-1:

string = 'b'
i = string.find('a' or 'b')
print(i)
string = 'b'
i = string.find('a') or string.find('b')
print(i)
正确的编写方法是什么?

string.find()
如果未找到字符串,则返回
-1
,因此您必须明确测试:

但是,这只会告诉您字符串是否存在,而不是索引是否存在。您也可以在中使用

'a' in string or 'b' in string
如果需要查找位置,则最好先将第一个结果存储在变量中:

a_pos = string.find('a')
pos = a_pos if a_pos > -1 else string.find('b')

现在
pos
要么是
-1
(未找到子字符串),要么是找到的子字符串的位置(因此
'a'
如果存在,否则
'b'
)。请注意,您随后知道一个位置,但不知道找到了哪个子字符串。这可能也没什么用处。

您必须分两步完成:

string = 'b'
i = string.find('a')
if i < 0:
    i = string.find('b')
print(i)
string='b'
i=string.find('a')
如果i<0:
i=string.find('b')
印刷品(一)

在这种情况下,正则表达式可能是一种解决方案,尽管对于您提供的简单情况,它不是最快的:

import re
m = re.search(r'a|b', string)
print(m and m.start())

如果字符串中有a或b,则此代码段将返回True

any(letter in string for letter in ('a','b'))

如果您想添加的不仅仅是a或b,那么它也很容易扩展。这并没有给出子字符串的位置。@Daniel:没有,但是如果
'a'
不存在,那么为
'a'
'b'
查找索引并没有多大帮助,真的。如果
pos
不是
-1
,我们找到了这两个中的哪一个?@Daniel:此外,OP想要一个职位还很不清楚。那么预期的结果是什么<代码>-1
'a'
'b'
的位置?或者只是其中一个子字符串存在(因此
True
False
)?实际上,我需要代码上出现的每个a和b的索引。我的初始代码比我在这里介绍的代码更复杂,但由于这是一个问题,我认为可以简化它,这里有更有效的方法<代码>[i for i,enumerate(string)中的字母如果{'a',b'}]中的字母给你一个位置列表(可能是空列表)。这是你应该在问题中始终包含一个清晰的问题陈述的原因之一。是的,这是我的一个错误,过于强调最小值