str.find()
always returns -1
if not found.
Can I write an expression instead of str.find()
and return None
if not found?
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 に答える