list comprehension如果条件别替换

时间:2015-09-08 12:03:03

标签: python list replace list-comprehension

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

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

所以我想删除' m'使用rstrip并替换' _'

的非数字值

这是我的尝试

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','_']

有什么不对或丢失?

1 个答案:

答案 0 :(得分:4)

当你这样做 - 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', '_']