2015-09-08 3 views
1

Я пытаюсь форматировать список со значениями высот, но некоторые элементы не являются значениемсписок понимания заменить, если условие еще

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

, поэтому я хочу, чтобы удалить «т» с 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','_'] 

что неправильно или отсутствует?

ответ

4

Когда вы это сделаете - 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', '_'] 
+0

Отлично работает. Для меня это не совсем понятно, если с k [0] .isdigit() я не вызываю функцию, и поэтому все значения истинны, ... почему она работает с другим условием в вашей функции? – gis20

+0

У вас нет '()', поэтому вы не вызываете funciton, моя версия имеет это. '()' является синтаксисом для вызова функции. Без него вы обращаетесь к объекту функции, а не вызываете его. –

+0

@ gis20: Вам, возможно, нужно знать, что абсолютно любой объект в Python может быть успешно применен для ввода типа 'bool', что и есть' if' для его аргумента. Общее правило состоит в том, что нулевые строки, пустые списки и кортежи и множества, нулевые числовые значения и None являются ложными (часто называемыми «ложными»). Все остальное, например объект функции, является «правдивым». – nigel222

Смежные вопросы