我将实现以下功能: 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
那么我该如何纠正呢?
答案 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
运算符将返回True
或False
,因此您可以编写:
[i in [2, 5, 9] for i in k]