如何用空字符串替换所有 None
,然后调用一些函数 f
?
[f(x) for x in xs if x is not None else '']
原文由 AP257 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何用空字符串替换所有 None
,然后调用一些函数 f
?
[f(x) for x in xs if x is not None else '']
原文由 AP257 发布,翻译遵循 CC BY-SA 4.0 许可协议
具体问题已经在以前的答案中得到解决,所以我将解决在列表理解中使用条件的一般想法。
这是一个示例,说明如何在列表理解中编写条件:
X = [1.5, 2.3, 4.4, 5.4, 'n', 1.5, 5.1, 'a'] # Original list
# Extract non-strings from X to new list
X_non_str = [el for el in X if not isinstance(el, str)] # When using only 'if', put 'for' in the beginning
# Change all strings in X to 'b', preserve everything else as is
X_str_changed = ['b' if isinstance(el, str) else el for el in X] # When using 'if' and 'else', put 'for' in the end
请注意,在 X_non_str
的第一个列表理解中,顺序是:
Iterable if 条件 中 项目 的 表达式
在 X_str_changed
的最后一个列表理解中,顺序是:
expression1 if 条件 else expression2 for item in iterable
我总是很难记住 expression1 必须在 if 之前,而 expression2 必须在 else 之后。我的头脑希望两者都在之前或之后。
我猜它是这样设计的,因为它类似于正常语言,例如“ 如果 下雨我想呆在里面, 否则 我想出去”
用简单的英语 来说,上面提到的两种列表推导式可以表述为:
只有 if
:
_extractapple for _applebox if _apple_isripe _ ___
和 if/else
_markapple if _apple_isripe else _leave_itunmarked for apple in _applebox
原文由 Tim Skov Jacobsen 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答869 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
你完全可以做到。这只是一个订购问题:
一般来说,
并且,对于仅具有
if
条件的列表理解,请注意,这实际上使用了不同的语言构造,即 条件表达式,它本身不是 理解语法 的一部分,而
if
在for…in
之后是列表理解的一部分,用于从可迭代的源中 过滤 元素。条件表达式可用于您希望根据某些条件在两个表达式值之间进行选择的各种情况。这与 存在于其他语言中的三元运算符
?:
相同。例如: