Преобразование строки в int в цикле for

#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]]
  

pyFiddle

Редактировать:

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 .