9

str.find()-1如果找不到,总是返回。如果找不到str.find(),我可以写一个表达式来代替吗?return None

4

3 回答 3

7

你的意思是这样的吗?

def find2(str, substr):
    result = str.find(substr)
    return result if result != -1 else None

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

    if result != -1:
        return result 
    else:
        return None
于 2012-11-22T08:43:15.133 回答
5
None if str.find() < 0  else str.find()

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

index = str.find()
None if index < 0  else index

在 2.5中添加了三元条件。所以如果你有旧版本的 Python,你可以这样做:

def my_find(str, sub_str)
    index = str.find(sub_str)
    if index < 0:
        return None
    else:
        return index
于 2012-11-22T08:42:55.087 回答
3

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

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

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

(lambda x: x and x - 1)((str.find(substr) + 1) or None)

例如:

>>> (lambda x: x and x - 1)(('abcd'.find('b') + 1) or None)
1
>>> (lambda x: x and x - 1)(('abcd'.find('_') + 1) or None)
>>>

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

于 2012-11-22T09:31:14.627 回答