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

2024-05-29 04:00:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: in示例列表newforinputifcondition
1条回答
网友
1楼 · 发布于 2024-05-29 04:00:16

你不能把陈述和作业混在一起,不是吗

赋值是一个语句(=+=,等等)。赋值语句包含表达式(位于=右侧的所有内容),但它本身不能在表达式内部使用。具体原因有:表达式中的赋值导致很难找到bug。经典的例子是混淆等式测试(==)和赋值:

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>是一个新列表时,空列表首先添加到末尾

相关问题 更多 >

    热门问题