#python #python-3.x #list
Вопрос:
Мне нужно написать программу на python, которая считывает 2d-список из txt-файла, а затем выполняет некоторые действия за определенное время (т. Е. 2 секунды).
3 3
ULR
RRL
UUD
Вот как находится файл txt внутри.
with open(argv[1]) as f:
n,m=f.read().split()
n=int(n)
m=int(m)
a=[[char for char in line]for line in f]
И это код, который я использую для анализа данных в 2d-список.
Моя проблема в том, что это слишком медленно. Основной алгоритм программы имеет временную сложность O(n^2), и я написал ту же программу на c для тестирования тех же входных данных. Чтобы успешно завершить работу с массивом 999×999 в качестве входных данных, программе на языке си требуется около 5 секунд, в то время как программе на python требуется намного больше 10. Поскольку алгоритм фактически тот же, моя следующая мысль заключается в том, что виноват мой способ передачи данных из файла в 2d-список на python.
Ценю ваш вклад :).
Комментарии:
1. вы используете
f.read().split()
илиf.readline().split()
?2. f.читать().разделить()
3.
read()
читает весь файл, и похоже, что вы действительно хотите прочитать только первую строку, чтобы получитьn
иm
правильно? С вашим текущим кодом и входными данными вы не получаете aValueError
?4. Это прекрасно работает, я понимаю вашу точку зрения, но даже с readline проблема остается.
Ответ №1:
Я думаю, что это может быть быстрее:
with open("filename.txt", encoding="UTF-8") as ifile:
m, n = ifile.readline().split()
arr2d = list(map(list, ifile.readlines()))