1

Python構文のヘルプが必要

疑似コード

paramsでparamがNoneでない場合、param replace('xx'、'x')

私はここまで到達します:

param.replace('|', '/') for param in ("bar|one","bar|two")

私の質問は、このコード行にNoneチェックを追加する方法です。

4

3 に答える 3

8

多分:

[ param.replace("|", "/") if param is not None else None for param in iterable ]

または、ロジックを少し入れ替えると、もう少し読みやすくなるかもしれません。

[ None if param is None else param.replace("|", "/") for param in iterable ]

私は2番目のバージョンの方が少し好きです。なぜならNone else None、最初のバージョンに存在していたナンセンスを壊すからです...

これは、@Tim Pietzcker による (最初の) 回答とは少し異なります。彼の(最初の)答えはNone、入力イテラブルから値をフィルタリングしますが、この答えは値を通過させます。


ここでは、Python の条件式(他の言語では「三項演算子」と呼ばれることもあります) を使用します。構文は次のとおりです。

value_if_true if conditional_expression else value_if_false
于 2013-01-04T21:22:31.573 に答える
7
[param.replace('|', '/') for param in params if param is not None]

Noneこれにより、入力リストからすべてのパラメーターが静かに削除されるため、

("bar|one", None, "bar|two")

になるだろう

["bar/one","bar/two"]

それを望まない場合は、

[param.replace('|', '/') if param is not None else None for param in params]
于 2013-01-04T21:21:23.663 に答える
0

場合によります...

None 要素を保持しますか? もしそうなら:

[(each.replace('|', '/') if each is not None else None) for each in listOfWords]

Nones を除外する場合は、次のようにします。

[each.replace('|', '/') for each in listOfWords if each is not None]
于 2013-01-04T21:27:38.263 に答える