Понимание двумерного списка Python 2

Я хотел бы знать, как я могу преобразовать строки в списке в целые числа.

Например:

Вход:

data = [
['1', '-160'],
['2', '-3000'],
['4', '-2'],
['5', '0.27'], ]

data = [int(a) for a in data[0]] #This converts only the first row of the list - I need the whole list converted 


print(data)

Выход:

[[1, -160], [2, -3000],[4, -2],[5, 0.27]]

Причина этого в том, что я хочу отсортировать список, но это не работает, когда числа имеют апострофы.

Я надеюсь, что кто-нибудь может мне помочь :)


person Christian Pichler    schedule 11.01.2018    source источник


Ответы (3)


Это было бы правильным пониманием списка:

[[float(c) for c in row] for row in data]

Обратите внимание, что я изменил int(...) на float(...) для обработки плавающих чисел в вашем вводе. Это дает в качестве вывода:

[[1.0, -160.0], [2.0, -3000.0], [4.0, -2.0], [5.0, 0.27]]

Согласно вашему комментарию, если у вас есть буквы в вашем списке, вы также можете добавить оператор if в свое понимание списка:

[[float(c) if c.lstrip('-').isdigit() else c for c in row] for row in data ]
person Alex    schedule 11.01.2018
comment
Спасибо за вашу помощь! Что я могу сделать, если у меня есть письма в моем списке? Например: данные = [['A', '-160'], ['B', '-3000'], ['C', '-2'], ['D', '0,27'], ] Как их можно игнорировать? - person Christian Pichler; 11.01.2018
comment
Проблема с этим решением заключается в том, что все отрицательные числа игнорируются. У вас есть решение и для этого? Спасибо за вашу большую помощь! - person Christian Pichler; 11.01.2018
comment
Хорошо, нашел решение сам. [[float(c) if c.lstrip('-').isdigit() else c для c в строке] для строки в данных] - person Christian Pichler; 11.01.2018

data = [
['1', '-160'],
['2', '-3000'],
['4', '-2'],
['5', '0.27'], ]

print [[int(i), float(j)] for i, j in data]

Результат:

[[1, -160.0], [2, -3000.0], [4, -2.0], [5, 0.27]]
person Rakesh    schedule 11.01.2018

Я думаю, что это решит вашу проблему (учитывая, что вы хотите, чтобы все значения были целыми числами):

import math
...
result = [[math.floor(float(y)) for y in x] for x in data]

Результат

[[1, -160], [2, -3000], [4, -2], [5, 0]]
person Asbjørn A. Fellinghaug    schedule 11.01.2018