列表理解替换 if 条件 else

gis*_*s20 1 python replace list-comprehension list

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

hei=['NN', '99.0m', '99.0m', '99.0m', '99.0m', '97.0m', '97.0m', '97.0m','rat_v2']
Run Code Online (Sandbox Code Playgroud)

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

这是我的尝试

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

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

heiFormat=['NN', '99.0', '99.0', '99.0', '99.0', '97.0', '97.0', '97.0','rat_v2']
Run Code Online (Sandbox Code Playgroud)

虽然我想要类似的东西

heiFormat=['_', '99.0', '99.0', '99.0', '99.0', '97.0', '97.0', '97.0','_']
Run Code Online (Sandbox Code Playgroud)

有什么问题或缺少什么?

Ana*_*mar 5

当您这样做时 -k[0].isdigit您只是在访问该函数,而不是调用它,这就是该条件对所有值的评估结果为 true 的原因。

你应该叫它。而且你也不需要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', '_']
Run Code Online (Sandbox Code Playgroud)