Как посмотреть, не является ли int во время каста int - PullRequest
0 голосов
/ 20 марта 2019

У меня есть Matrix=[['1', '2', '3'], ['4', 'a', 'n']]

Я делаю это:

Matrix=[arr.split() for arr in Matrix]
Matrix=[list(map(int, arr)) for arr in Matrix]

как вы можете видеть, у меня есть 'a' и 'n', я хочу остановить процесс и поднимать флаг как con = false каждый раз, когда я получаю символ внутри Матрицы, как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Одним из решений является объявление «лучшей» функции приведения и вызов ее вместо int в map:

matrix = [['1', '2', '3'], ['4', 'a', 'n']]

def int_with_default(value, default="NaN"):
    try: 
        return int(value)
    except ValueError: 
        return default

matrix = [list(map(int_with_default, arr)) for arr in matrix]

Выходная матрица будет [[1, 2, 3], [4, 'NaN', 'NaN']]. Обратите внимание, что вы также можете использовать math.nan вместо этой произвольной строки, которую я использовал в качестве примера.

0 голосов
/ 20 марта 2019

Если у вас есть только положительные целые числа, вы можете использовать следующий listcomp:

m = [['1', '2', '3'], ['4', 'a', 'n']]

[list(map(lambda x: int(x) if x.isdigit() else None, row)) for row in m]
# [[1, 2, 3], [4, None, None]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...