Преобразование строки в число с плавающей точкой с обработкой ошибок внутри списка - PullRequest
1 голос
/ 03 июня 2019

Рассмотрим следующий список списков:

list1 = [['1.1','1.2'],['2.1', '2.2'],[''],...]

Этот список содержит списки с пустыми строками.Чтобы преобразовать все строки в этом списке списков в числа с плавающей запятой, можно использовать понимание списка, например:

[[float(j) for j in i] for i in list1]

(спасибо до ).

Но есть одинпроблема со списками, содержащими пустые строки - они вызывают исключение:

ValueError: не удалось преобразовать строку в число с плавающей точкой:

Есть ли способ использовать этот вид спискапонимание без явного использования циклов?

1 Ответ

1 голос
/ 03 июня 2019

Используйте условие if внутри понимания внутреннего списка, чтобы игнорировать пустые строки:

[[float(j) for j in i if i] for i in list1]

if i проверит «истинность» строк. Это вернет False только для пустых строк, поэтому они игнорируются.

Или, если вы хотите быть более уверенным в этом, используйте функцию для выполнения преобразования с обработкой исключений:

def try_convert(val):
    try:
        return float(val)
    except ValueError, TypeError:
        pass

[[float(z) for z in (try_convert(j) for j in i) if z] for i in list1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...