#python #python-3.x #function #file
Вопрос:
Я должен написать функцию, которая берет матрицу чисел из Mydata.mtx
файла и создает список списков для каждой строки. Файл Mydata.mtx-это всего лишь простой файл с числовой матрицей, как показано ниже
для уточнения приведем матрицу из файла:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
функция должна возвращать списки списков для каждой строки:
[['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10'], ['11', '12', '13', '14', '15']]
Я не могу получить это (выше), но вместо этого продолжаю получать это (ниже):
[['1', ' ', ' ', ' ', '2', ' ', ' ', ' ', '3', ' ', ' ', ' ', '4', ' ', ' ', ' ', '5', 'n'], ['6', ' ', ' ', ' ', '7', ' ', ' ', ' ', '8', ' ', ' ', ' ', '9', ' ', ' ', ' ', '1', '0', 'n'], ['1', '1', ' ', ' ', '1', '2', ' ', ' ', '1', '3', ' ', ' ', '1', '4', ' ', ' ', '1', '5', 'n']]
вот код:
#print statements are just to see what my output would be
def readMatrix(filename):
listOfLists = []
file = open(filename, "r")
for i in file:
iList = list(i)
listOfLists.append(iList)
print(listOfLists)
callFile = input("Enter the file name: ")
toReadFile = readMatrix(callFile)
дополнительная информация:
вторая функция должна транспонировать эту матрицу
после чего третья функция создает новый файл T.Mydata.mtx
(но я могу попытаться разобраться в этом позже. моя главная проблема-это первая функция
Комментарии:
1. Где ваш код? Похоже, вам просто нужно убрать пробелы.
2. @PaulRooney да, извините, я забыл добавить.. это должно быть там сейчас
Ответ №1:
Простое решение состоит в том, чтобы использовать str.split
без sep
аргумента, чтобы удалить все пробелы между числами.
def readMatrix(filename):
listOfLists = []
with open(filename) as f:
for i in f:
listOfLists.append(i.split())
return listOfLists
callFile = input("Enter the file name: ")
toReadFile = readMatrix(callFile)
print(toReadFile)
Это также можно было бы выразить более сжато, используя понимание списка.
def readMatrix(filename):
with open(filename) as f:
return [line.split() for line in f]
Комментарии:
1. Большое вам спасибо за вашу помощь. Я очень признателен вам за это
2. О, я об этом не знал. просто подумал, что str.split() на самом деле равно str.split(‘ ‘)
3. Я добавил ссылку на документы, которая объясняет это. Кроме того, если вы хотите транспонировать матрицу, можете ли вы использовать numpy или хотите реализовать ее самостоятельно?
4. извините за поздний ответ. Я пытаюсь решить этот код без использования импорта. Я использовал
[list(i) for i in zip(*M)]
во второй функции транспонирование матрицы. пока это работает, но нужно было бы изменить его, чтобы он тоже принимал пустые матрицы5. Как выглядит пустая матрица? Это
[]
[[]]
или что-то другое?
Ответ №2:
Проблема:
Похоже, у вас есть несколько лишних мест
Решение:
import re
# should be imported from the file
m = """1 2 3 4 5
6 7 8 9 10
11 12 13 14 15"""
m = re.sub(' ', ' ', m) # replaces extra spaces with one single space
numbers = list(map(lambda row: row.split(' '), m.split('n')))
# numbers == [['1', '2', '3', '4', '5'], ['6', '7', '8', '9', '10'], ['11', '12', '13', '14', '15']]
Комментарии:
1. Большое вам спасибо, но есть ли способ обойтись без импорта?