让我们用这个问题来回顾一些概念。我认为最好先看看基本面,这样你就可以推断出不同的情况。
其他答案为您的问题提供了具体答案。我将首先介绍一些一般情况,然后回答这个问题。
基本原理
列表理解中的if/else语句涉及两件事:
列表解析条件表达式(三元运算符)
1.列出理解
它们提供了创建列表的简洁方法。
它的结构包括:“括号包含一个表达式,后跟一个for子句,然后是零个或多个for或if子句”。
案例1
这里我们没有条件。iterable中的每个项都添加到new_list中。
new_list = [expression for item in iterable]
new_list = [x for x in range(1, 10)]
> [1, 2, 3, 4, 5, 6, 7, 8, 9]
案例2
这里我们有一个条件。
示例1
条件:只有偶数将被添加到new_list中。
new_list = [expression for item in iterable if condition == True]
new_list = [x for x in range(1, 10) if x % 2 == 0]
> [2, 4, 6, 8]
示例2
条件:只有3的倍数的偶数才会添加到new_list中。
new_list = [expression for item in iterable if condition == True]
new_list = [x for x in range(1, 10) if x % 2 == 0 if x % 3 == 0]
> [6]
但是,如果在new_list中使用两个if,为什么会有一个条件?
前面的表达式可以写成:
new_list = [x for x in range(1, 10) if x % 2 and x % 3 == 0]
> [6]
我们只使用一个if语句。
这就像在做:
new_list = []
for x in range(1, 10):
if x % 2 == 0 and x % 3 == 0:
new_list.append(x)
> [6]
示例3
为了便于讨论,您也可以使用或。
条件:偶数或3的倍数将添加到new_list中。
new_list = [x for x in range(1, 10) if x % 2 == 0 or x % 3 == 0]
> [2, 3, 4, 6, 8, 9]
案例3
多个条件:
这里我们需要条件表达式(三元运算符)的帮助。
2.条件表达式
什么是条件表达式?名称说明:具有某些条件的Python表达式。
<Exp1> if condition else <Exp2>
首先评估条件。如果条件为True,则计算并返回<Exp1>。如果条件为False,则求值并返回<Exp2>。
具有多个条件的条件表达式:
<Exp1> if condition else <Exp2> if condition else <Exp3>...
Real Python的一个示例:
age = 12
s = 'minor' if age < 21 else 'adult'
> minor
s的值取决于年龄值。
3.列出带条件的理解
我们像这样把列表理解和条件放在一起。
new_list = [<Conditional Expression> for <item> in <iterable>]
new_list = [<Exp1> if condition else <Exp2> if condition else <Exp3> for <item> in <iterable>]
条件:偶数将被添加为“偶数”,第三个数字将添加为“第三个”,其余数字将添加“奇数”。
new_list = ['even' if x % 2 == 0 else 'number three' if x == 3 else 'odd'
for x in range(1, 10)]
> ['odd', 'even', 'number three', 'even', 'odd', 'even', 'odd', 'even', 'odd']
问题的答案
[f(x) for x in xs if x is not None else '']
这里我们对列表的结构有一个问题:xs中的for x应该位于表达式的末尾。
正确方式:
[f(x) if x is not None else '' for x in xs]
进一步阅读:
Python是否有三元条件运算符?