带有if-else和“ in”判断的Python速记语句

时间:2018-10-02 19:01:01

标签: python

我将实现以下功能: k是一个列表,例如:

k = [1,2,3,4,5,6,7,6,4,7,2,3,4,4,8,9,1,0,2,4]

如果元素在此列表的子集中,例如,我想要一个布尔值列表。如果[2,5,9]中的元素返回true,否则返回false:

p = [False, True, False, False, True, False, False, False, False, False, True, False, False, False, False, True, False, False, True, False]

我只能通过循环标准实现此功能:

p = []
for element in k: 
    if element in [2,5,9]:
        p.append(True)
    else:
        p.append(False) 

但是,我想要用一个简单的简短语句来实现这一点,然后我写了:

p2 = [True for i in k if i in [2,5,9] else False]

但这会给'else'一个错误:

  File "<stdin>", line 1
    p2 = [True for i in k if i in [2,5,9] else False]
                                             ^
SyntaxError: invalid syntax

那么我该如何纠正呢?

1 个答案:

答案 0 :(得分:3)

这是一个三元运算符,因此您可以将其编写为:

[True if i in [2, 5, 9] else False for i in k]

或更详细:

[(True if i in [2, 5, 9] else False) for i in k]

三元运算符本身与列表理解无关。您只需在列表推导的for部分之前写一个表达式。在此,此表达式“可能”是三元运算符。因此,这里没有混乱/模棱两可。

但是由于in运算符将返回TrueFalse,因此您可以编写:

[i in [2, 5, 9] for i in k]