2016-01-27 3 views
1

Я читаю файл по строкам. Каждая строка считывается таким образом, что она делится на список (длиной 13), который содержит подсписки (произвольной длины (обычно от одного до четырех). Это определяется структурой данных файла, который я читаю.Правильный список инициализации

выполняет проверку на каждую строку, чтобы увидеть, если он содержит нужные данные, а затем хочет сохранить его, если он делает.

сохраняется в список (так называемого results), содержащего 13 полей, каждый раз, содержащие несколько чтобы получить такую ​​структуру, как: results[0] = [line1[0], line2[0], ...]; results[1] = [line1[1], line2[1], ...]; ...; results[12] = [line1[12], line2[12], ...] (results[i][j] - это список длин 1, содержащий строку).

Я бы решил:

results = [] 
for i in line: 
    results[i].append(line[i]) 

Чтобы сделать это, хотя список results должен быть надлежащим образом инициализируется первым, который я не могу сделать вручную, так как я не знаю, если моя первая строка содержит запись, которую я хочу сохранить априорно и я не Не хочу инициализировать его со случайными значениями, которые я должен удалить позже, поскольку удаление первой записи в списке довольно неэффективно, насколько я знаю. Как я могу решить эту проблему?

ответ

3

Если вы знаете, что вам нужно держать ровно 13 вложенных списков, просто создайте его с 13 пустых списков:

results = [[] for _ in range(13)] 

Примечание: Вы не можете сделать:

results = [[]] * 13 

, потому что будет зеркалом ссылка на одиночный лист 13 раз; мутация любой записи будет мутировать все из них. См. this answer for more details.

Смежные вопросы