9

str.find() always returns -1 if not found. Can I write an expression instead of str.find() and return None if not found?

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 に答える