#python #arrays #python-3.x #matrix
#python #массивы #python-3.x #матрица
Вопрос:
Если у меня есть текстовый файл, где каждая строка является строкой в матрице, и каждая матрица разделена новой строкой, например
1234
1234
2345
2345
Как бы я приступил к созданию массива из этих матриц (без использования numpy).
Для 1 матрицы я делаю:
with open("matrix.txt", "r") as file:
matrix=[line.split() for line in file]
Чтобы экстраполировать этот код на несколько матриц, я попытался выполнить:
x=0
matrix=[]
with open("matrix.txt", "r") as file:
for line in file:
if line == "n":
x =1
else:
matrix[x].append([line.split()])
print(matrix)
Где строка из текстового файла добавляется к матрице, как и раньше, но если она встречает новую строку, она добавляет следующие строки к следующему индексу 3d-массива, так что в итоге я получаю массив массивов.
Приведенный мной код выдает ошибку and out of index, которая, как я знаю, должна произойти, потому что, когда я увеличиваю индекс матрицы на x, он на самом деле не существует, поскольку я его никогда не создавал.
Я застрял, и мне не помешала бы некоторая помощь. Пожалуйста, спросите, нужно ли вам, чтобы я что-то разъяснил, или я что-то недостаточно хорошо объяснил. Спасибо!
Редактировать: Вывод будет выглядеть примерно так [[[1,2,3,4], [1,2,3,4]], [[2,3,4,5],[2,3,4,5]]]
Таким образом, matrix [0][1][2] будет обращаться к первой матрице и извлекать 3.
Ответ №1:
Хорошо, попробуй это::
x=0
matrix=[]
row = []
with open("matrix.txt", "r") as file:
for line in file:
line = line.strip("n")
if line == "":
matrix.append(row)
row = []
else:
row.append([int(x) for x in list(line)])
if (len(row) > 0):
matrix.append(row)
print(matrix)
Результат: [[[1, 2, 3, 4], [1, 2, 3, 4]], [[2, 3, 4, 5], [2, 3, 4, 5]]]
Комментарии:
1. это не совсем то, что я ищу. Я виноват в том, что недостаточно хорошо это объясняю. Я отредактировал свой исходный пост, указав, каким будет ожидаемый результат.
Ответ №2:
Просто проверьте длину вашего списка и добавьте элемент, если необходимо:
РЕДАКТИРОВАТЬ: поскольку ваш рабочий метод не разделялся на отдельные целые числа, было бы странно, если бы расширенная версия. Обновлено до отредактированного вопроса
content = "1234n1234nn2345n2345"
x=0
matrixes = []
for line in content.split('n'):
if line is "":
x =1
else:
if len(matrixes) <= x:
matrixes.append([[int(x) for x in list(line)]])
else:
matrixes[x].append([int(x) for x in list(line)])
print(matrixes[0][0][0])
результаты в: 1
(ссылка на обновленный пример:https://repl.it/EDtz/0 )
Комментарии:
1. это не совсем то, что я ищу. Я виноват в том, что недостаточно хорошо это объясняю. Я отредактировал свой исходный пост, указав, каким будет ожидаемый результат.
2. Извините, что это была моя вина за то, что я недостаточно хорошо это объяснил.