Преобразовать элементы всех списков в n-списках в числа с плавающей точкой? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть список списков списков, который выглядит следующим образом:

[['1', '1', '13', '23', '1.0', '9', '20051102', '20170330', '16', '9', '2', '2', '24', '46', '7232.17'], ['2', '1', '13', '23', '1.0', '9', '20051102', '20170331', '28', '4', '5', '4', '19', '51', '6171.145'], ['3', '1', '13', '23', '1.0', '9', '20051102', '20170327', '8', '3', '0', '2', '15', '14', '4666.224'], ['4', '1', '13', '23', '1.0', '9', '20051102', '20170329', '22', '2', '1', '4', '18', '42', '5479.682'], ['5', '1', '13', '23', '1.0', '9', '20051102', '20170328', '15', '5', '6', '9', '28', '37', '9411.681'], ['6', '1', '3', '27', '0.0', '9', '20051228', '20170303', '6', '1', '0', '0', '14', '21', '3757.115'], ['7', '1', '3', '27', '0.0', '9', '20051228', '20170301', '1', '0', '1', '3', '40', '45', '10521.261'], ['8', '1', '3', '27', '0.0', '9', '20051228', '20170320', '2', '0', '0', '0', '174', '171', '43113.562'].

Он создан с помощью этого кода: lines = [[x for x in line.strip().split(',')] for line in myfile.readlines()[1:3000]]

Сейчасвсе элементы во всех списках являются строками, и если я пытаюсь lines = [[float(x) for x in line.strip().split(',')] for line in myfile.readlines()[1:3000]], я получаю сообщение об ошибке.

Дело в том, что если я попробую что-то вроде:

if str in lines: print(lines)

, который ничего не возвращает.

Я подозревал, что некоторые пустые строки могут вызватьпроблема, как: ['2976', '1', '1', '0', '', '4', '20160630', '20170318', '0', '0', '0', '0', '8', '2', '2125.364'] где 4-й элемент пуст ..

Что делать?

1 Ответ

0 голосов
/ 05 декабря 2018

просто напишите свою собственную функцию в float, которая обрабатывает пустые строки:

def myFloat(str):
    if str:
       return float(str)
    return <your_default_value> #e.g -1

, а затем:

lines = [[myFloat(x) for x in line.strip().split(',')] for line in myfile.readlines()[1:3000]]

, и вы всегда можете создать новый список без пустых строк, а затемитерировать по нему.

обновление:

просто используйте float(x) только если не пустая строка, например:

lines = [[float(x) for x in line.strip().split(',') if x] for line in myfile.readlines()[1:3000]]

обратите внимание на if x в конце.

...