У меня есть список строк, считанных из файла, который мне нужно превратить в 2D-массив:
IN >> lines = ['0.1;0;0;0;', '0.2;0;0;0;', '0.3;1;1;1;', '0.4;2;2;2;', '0.5;0;0;0;']
# Goes on for a few thousand lines
Обратите внимание, что каждая строка заканчивается на ;
.
Мне нужно исключить строки со всеми нулями (некоторые строки - все нули в начале и в конце)
I .split()
в ;
, но filter
None
для удаления пустых значений, которые я получу в конце каждого возвращаемого массива из .split()
.
data_array = [list(filter(None, line.split(';'))) for line in lines if line.split(';')[1] != '0']
OUT >> data_array = [[0.1, 0, 0, 0], [0.2, 0, 0, 0], [0.3, 1, 1, 1], [0.4, 2, 2, 2], [0.5, 0, 0, 0]]
Это своего рода возвращение нужного мне двумерного массива, но включая массивы со всеми нулями, поэтому мое условие должно быть не в том месте. За исключением того, что я думал, что условия в конце понимания списка фильтруют элементы, которые go попадают в список.
Тогда я подумал, что мне нужно отфильтровать массив "inside":
data_array = [[l for l in (filter(None, line.split(';'))) if l != '0'] for line in lines]
OUT >> data_array = [[0.1], [0.2], [0.3, 1, 1, 1], [0.4, 2, 2, 2], [0.5]]
За исключением того, что это удаляет нули, но оставляет маркер (первый элемент каждого массива - маркер)
Я хочу получить только массивы, которые содержат числа, но не нули
DESIRED OUTPUT >> data_array = [[0.3, 1, 1, 1], [0.4, 2, 2, 2]]