有没有办法在一行中基于<condition>执行两个语句?</condition>

时间:2014-03-15 16:49:28

标签: python python-2.7 if-statement conditional-expressions

是否可以像这样写一行:<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               ^

=所在的位置)。有解决方法吗?我知道这可能不是最好的例子。我知道它可能看起来有点难看。但在我看来,它是可读的。

1 个答案:

答案 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>为新列表时,会在最后添加空列表。