0

是否可以像这样写一行:<statement> if <cond> else <statement>. 我的意思不是像a = 1 if 1 else 2.

例子:

我有一个列表p,它本身就有列表。假设我得到一个 input 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               ^

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

4

1 回答 1

3

您不能将语句混合到作业中,不。

赋值是一个语句(=,+=等)。赋值语句包含一个表达式(在 右边的所有内容=),但它本身不能在表达式内部使用。这有特定的原因:表达式中的赋值导致难以发现的错误。经典示例将相等测试 ( ==) 与赋值混淆:

if x = 0:
    # oops, that wasn't a test..

请参阅Python 常见问题解答

您正在尝试在条件表达式中的赋值之间切换,而这在 Python 中是不允许的。

只需使用if语句;在您的具体示例中,您也许可以使用:

for input in inputIter:
    if <condition>: 
        p.append([]) # generate new list
    p[-1].append(input)

总是附加到最后一个嵌套列表,但是当<condition>是一个新的空列表时,首先在末尾添加。

于 2014-03-15T16:57:34.213 回答