【问题标题】:Pass statement in one-line Python if-else statement [duplicate]单行Python if-else语句中的传递语句[重复]
【发布时间】:2021-06-08 13:49:14
【问题描述】:

我想编写一个单行 if-else 语句,如果第一个条件不满足,它什么也不做。 This question 与我想要实现的非常相似,但是当条件不满足时,我希望我的代码为pass(什么都不做)。

换句话说:

# Some list
cols = ['firstname', 'middlename', 'lastname', 'dob', 'gender', 'salary']

# Filter elements in list
[col if 'name' in col else pass for col in cols]

# Expected output
> ['firstname', 'middlename', 'lastname']

看完this other post中的cmets后,我也尝试跳过else语句:

[col if 'name' in col for col in cols]
> SyntaxError: invalid syntax

我想简化为单行的语法是:

my_list = []
for col in cols:
    if 'name' in col:
        my_list.append(col)

上面的代码可以简化为单行代码吗?

【问题讨论】:

  • [col for col in cols if 'name' in col] ?
  • 您不需要明确的 else 语句,只需将其从列表理解中删除即可。

标签: python


【解决方案1】:

pass 是一个语句,不是一个值,所以不能在条件表达式中使用。

你想使用列表推导的过滤子句。

[col for col in cols if 'name' in col]

有点遗憾的是,关键字if 用于三种不同的句法结构(if 语句、条件表达式以及由 list/dict/set 推导和生成器表达式共享的迭代结构)。

【讨论】:

    【解决方案2】:

    iiuc:

    my_list = [col for col in cols if 'name' in col]
    

    if 语句需要在使用列表推导时 for 循环之后出现。

    【讨论】:

    • 这不是 if 语句;调用它只会加剧所有使用 if 关键字的各种结构之间的混淆。
    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2017-02-01
    • 2020-01-28
    • 2022-12-22
    相关资源
    最近更新 更多