是否可以像这样写一行:<statement> if <cond> else <statement>
。我的意思不是a = 1 if 1 else 2
。
示例:
我有一个列表p
,它本身就有列表。我们假设我得到一个输入inputIter
。我想做以下事情:
for input in inputIter:
if <condition>: p+=[[input]] # generate new list
else: p[-1]+=[input] # append to latest list
然后我心里想,必须有一种方法可以让它成为一个单行,所以我尝试了这个:
for input in inputIter:
p+=[[input]] if <condition> else p[-1]+=[input]
但这会产生
Syntax error: invalid syntax ^
(=
所在的位置)。有解决方法吗?我知道这可能不是最好的例子。我知道它可能看起来有点难看。但在我看来,它是可读的。
答案 0 :(得分:3)
你不能将陈述混合到作业中,不能。
作业是一种陈述(=
,+=
等。赋值语句包含一个表达式(=
右侧的所有内容),但它本身不能在表达式中使用。这有一个特定的原因:表达式中的赋值导致难以发现的错误。经典的例子是将相等性测试(==
)与赋值混淆:
if x = 0:
# oops, that wasn't a test..
请参阅Python FAQ。
您正在尝试在条件表达式中切换分配,并且Python中不允许这样做。
只需使用if
语句;在您的具体示例中,您可以使用:
for input in inputIter:
if <condition>:
p.append([]) # generate new list
p[-1].append(input)
此始终会附加到最后一个嵌套列表,但当<condition>
为新列表时,会在最后添加空列表。