在列表内理解里使用if/else?

2024-04-27 04:33:03 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在Python中执行以下操作?

row = [unicode(x.strip()) for x in row if x is not None else '']

本质上:

  1. 用空字符串替换所有none,然后
  2. 执行功能。

Tags: 字符串in功能noneforifisunicode
3条回答

你完全可以这么做,这只是订购问题:

[unicode(x.strip()) if x is not None else '' for x in row]

一般来说

[f(x) if condition else g(x) for x in sequence]

而且,对于仅具有if条件的列表理解

[f(x) for x in sequence if condition]

注意,这实际上使用了一个不同的语言构造conditional expression,它本身不是comprehension syntax的一部分,而for…in后面的if是列表理解的一部分,用于从源iterable筛选元素。


条件表达式可以用于各种情况,在这些情况下,您希望根据某些条件在两个表达式值之间进行选择。这与ternary operator ^{} that exists in other languages相同。例如:

value = 123
print(value, 'is', 'even' if value % 2 == 0 else 'odd')

下面是另一个示例:

>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!")
Ha, ha, ha!

它利用了这样一个事实,即if i对于0计算结果为False,对于由函数range()生成的所有其他值计算结果为True。因此,列表理解评估如下:

>>> ["ha" if i else "Ha" for i in range(3)]
['Ha', 'ha', 'ha']

单程:

def change(f):
    if f is None:
        return unicode(f.strip())
    else:
        return ''

row = [change(x) for x in row]

尽管你有:

row = map(change, row)

或者可以使用lambda内联。

相关问题 更多 >