#python #for-loop #casting
#python #for-цикл #Кастинг
Вопрос:
Я пытаюсь преобразовать матрицу строк в матрицу целых чисел, например, у меня есть Matrix=[['1','2']['3','4']]
Я использую split, потому что моя матрица представляет собой входные данные с пробелами внутри, я просто привел это для примера.
и я делаю это:
for arr in Matrix:
arr=arr.split()
arr=[map(lambda x:int(x),arr)]
по какой-то причине матрица остается неизменной, я что-то упускаю?
РЕДАКТИРОВАТЬ ЭТО МОЙ ИСПОЛНЯЕМЫЙ КОД:
Matrix=[];
while True:
try:
arrInput=input('enter');
Matrix.append(arrInput)
except (KeyboardInterrupt,EOFError):
print('done');
break;
for arr in Matrix:
arr=arr.split()
Комментарии:
1. Ваш
Matrix=...
недопустимый код на Python. Кроме того, ваше использованиеsplit
предполагает, что ваша матрица на самом деле представляет собой список строк, которые вы разделили пробелами, что не согласуется с вашим первым определением. Пожалуйста, отредактируйте свой вопрос с помощью реального, исполняемого кода Python.2. Ответ Могамбо был бы решением. Более того, если
Matrix
действительно так, как указано в тексте,split()
это не имеет смысла. Вопрос стиля:matrix
неMatrix
используйте. Последнее обычно используется для имен классов.3. Нигде в вашей правке вы не показываете, где вы пытаетесь создать
int
объект изstr
.4. PS. вам не нужны все эти точки с запятой.
Ответ №1:
Ваш синтаксис матрицы недопустим, скорее должен быть:
Matrix=[['1','2'],['3','4']]
Использование понимания списка:
Matrix=[['1','2'],['3','4']]
print([[int(x) for x in lst] for lst in Matrix])
или
(если map
это то, как вы хотите, чтобы это было похоже):
print([list(map(int, lst)) for lst in Matrix])
ВЫВОД:
[[1, 2], [3, 4]]
Редактировать:
OP: Дело в том, что я не хочу, чтобы это печаталось, поэтому, когда я удаляю печать, я получаю эту ошибку.
Если вы не хотите ее печатать, вы можете назначить ее:
res = [list(map(int, lst)) for lst in Matrix]
Комментарии:
1. Ошибка значения: недопустимый литерал для int() с основанием 10:
2. @AlexK Я также добавил онлайн-тестовую скрипку.
3. Дело в том, что я не хочу, чтобы она печаталась, поэтому, когда я удаляю печать, я получаю эту ошибку.
4. @AlexK, просто назначьте ее
res = [list(map(int, lst)) for lst in Matrix]
, если вы не хотите печатать?5. Я получаю эту ошибку: ValueError: недопустимый литерал для int () с основанием 10: ‘
Ответ №2:
Попробуйте это с помощью numpy
( pip install numpy
):
import numpy as np
matrix = [['1', '2'], ['3', '4']]
result = np.array(matrix, dtype=int)
print(result.tolist())
# [[1, 2], [3, 4]]
Комментарии:
1. ‘np не определен’
2. Извините, вам нужно импортировать
numpy
:pip install numpy
и затемimport numpy as np
.