【问题标题】:list comprehension replace if condition else列表理解替换 if 条件 else
【发布时间】:2023-03-29 18:13:01
【问题描述】:

我正在尝试使用高度值格式化列表,但某些元素不是值

hei=['NN', '99.0m', '99.0m', '99.0m', '99.0m', '97.0m', '97.0m', '97.0m','rat_v2']

所以我想用 rstrip 删除 'm' 并替换 '_' 的非数值

这是我的尝试

heiFormat=[k.rstrip('m') if k[0].isdigit else k.replace(k,'_') for k in hei]

但结果并不完全正确,好像没有替换非数字

heiFormat=['NN', '99.0', '99.0', '99.0', '99.0', '97.0', '97.0', '97.0','rat_v2']

虽然我想要类似的东西

heiFormat=['_', '99.0', '99.0', '99.0', '99.0', '97.0', '97.0', '97.0','_']

出了什么问题或遗漏了什么?

【问题讨论】:

    标签: python list replace list-comprehension


    【解决方案1】:

    当您这样做时 - k[0].isdigit - 您只是在访问该函数,而不是在调用它,这就是为什么该条件对于所有值都为真。

    你应该调用它。而且你也不需要replace,更简单的方法是直接把'_'放在那里,因为k.replace(k,'<something>')和直接使用'<something>'一样。

    例子-

    >>> heiFormat=[k.rstrip('m') if k[0].isdigit() else '_' for k in hei]
    >>> heiFormat
    ['_', '99.0', '99.0', '99.0', '99.0', '97.0', '97.0', '97.0', '_']
    

    【讨论】:

    • 很好用。我不完全清楚的是,如果使用 k[0].isdigit() 我不调用函数,因此所有值都是真的,....为什么它在你的函数中的 else 条件下起作用?
    • 你没有 () ,所以你不调用函数,我的版本有。 () 是调用函数的语法。没有它,您将访问函数对象,而不是调用它。
    • @gis20:您可能需要知道,Python 中的任何实体都可以成功转换为类型bool,这就是if 对其参数所做的。一般规则是空字符串、空列表和元组和集合、零数值和无为假(通常称为“假”)。其他任何东西,例如函数对象,都是“真实的”。
    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2018-04-27
    • 2023-03-14
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多