1

在 Python 语法方面需要一些帮助

伪代码

如果 param 在 params 中不是 None,则 param replace('xx', 'x')

我做到了这一点:

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

我的问题是如何在这行代码中添加一个无检查?

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 ]

我更喜欢第二个版本,因为如果打破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]

如果你想过滤掉无,那么你可以这样做:

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