У меня есть текстовый файл, содержащий матрицу чисел:
999 999 10 8
3 4 999 999 999
6 999 2 7 999
999 6 3 5 6
999 9 1 10 999
10 6 999 2 2 999
Я пытаюсь прочитать каждую строку и сохранить ее в массиве в Python, но
У меня возникла проблема с изменением каждого значения на int
с string
. Я попытался использовать int()
при анализе каждой строки, но получаю ошибку, заключающуюся в невозможности передать list
в аргумент int().
попробуйте следующее:
matrix = [[int(i) for i in line.split()] for line in open('myfile.txt')]
[править] если вы не хотите, чтобы первая строка только что прочитала его раньше.
with open('myfile') as f:
f.readline()
matrix = ....
Используя map()
, вы получите list
of list
s:
>>> with open('myfile.txt') as matrix:
... [map(int, line.split()) for line in matrix]
...
[[999, 999, 10, 8], [3, 4, 999, 999, 999], [6, 999, 2, 7, 999], [999, 6, 3, 5, 6], [999, 9, 1, 10, 999], [10, 6, 999, 2, 2, 999]]
map
внутри списка понимание, если map
делает то же самое, что и [f(x) for x in iterable]
?
map()
устраняет внутренний цикл for
вы используете внутри своего ответа
Для каждой строки разделите символ пробела, а затем преобразуйте каждый токен в int. Одним из способов сделать это, используя понимание списка, является:
s = "999 999 10 8"
[int(t) for t in s.split(" ")]
#evaluates to [999, 999, 10, 8]
nums = []
with open('file.txt') as f:
for line in f:
nums.append([int(n) for n in line.split()])
Вы могли бы написать это как одно понимание списка, но это может стать неприятным.