【问题标题】:Is there a way to execute two statements based on <condition> in one line?有没有办法在一行中根据 <condition> 执行两条语句?
【发布时间】:2023-03-25 20:45:01
【问题描述】:

是否可以这样写一行:&lt;statement&gt; if &lt;cond&gt; else &lt;statement&gt;。我的意思不是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               ^

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

【问题讨论】:

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


    【解决方案1】:

    你不能将语句混入赋值中,不。

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

    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)
    

    这个总是附加到最后一个嵌套列表,但是当&lt;condition&gt;是一个新的时,空列表首先添加到最后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 2021-05-23
      • 2014-07-03
      相关资源
      最近更新 更多