Быстро считывайте 2d-список из txt-файла в python3

#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 правильно? С вашим текущим кодом и входными данными вы не получаете a ValueError ?

4. Это прекрасно работает, я понимаю вашу точку зрения, но даже с readline проблема остается.

Ответ №1:

Я думаю, что это может быть быстрее:

 with open("filename.txt", encoding="UTF-8") as ifile:
    m, n = ifile.readline().split()
    arr2d = list(map(list, ifile.readlines()))