当找不到substr时,表达式评估为None

Thu*_*rEX 9 python string

str.find()-1如果找不到则总是返回.我能写的,而不是表达str.find()return None如果没有发现?

Wil*_*den 7

你的意思是这样的吗?

def find2(str, substr):
    result = str.find(substr)
    return result if result != -1 else None
Run Code Online (Sandbox Code Playgroud)

在Python 2.4中,将最后一行更改为

    if result != -1:
        return result 
    else:
        return None
Run Code Online (Sandbox Code Playgroud)


zen*_*poy 5

None if str.find() < 0  else str.find()
Run Code Online (Sandbox Code Playgroud)

如果代码重复困扰你(它应该):

index = str.find()
None if index < 0  else index
Run Code Online (Sandbox Code Playgroud)

2.5 中加入了三元条件.因此,如果你有一个旧版本的Python,你可以这样做:

def my_find(str, sub_str)
    index = str.find(sub_str)
    if index < 0:
        return None
    else:
        return index
Run Code Online (Sandbox Code Playgroud)


ice*_*ime 3

如果我总结一下,你想要的东西是:

  • 是一个表达式
  • 评估为None未找到时
  • 找到时评估索引
  • 不使用三元(以便 Python 2.4 可以处理它)

我能想出的满足所有要求的唯一解决方案是这个奇怪的事情:

(lambda x: x and x - 1)((str.find(substr) + 1) or None)
Run Code Online (Sandbox Code Playgroud)

例如:

>>> (lambda x: x and x - 1)(('abcd'.find('b') + 1) or None)
1
>>> (lambda x: x and x - 1)(('abcd'.find('_') + 1) or None)
>>>
Run Code Online (Sandbox Code Playgroud)

我没有安装 Python 2.4 来测试它,所以我只能希望它能工作。