pasaranax
Ноя. 3, 2010 00:45:14
ой, не с двумя циклами, я имел ввиду вариант pill'а, но подправил бы его вот так:
big_list = []
for line in in_file:
if line[0] == '[':
big_list.append([])
elif line.strip():
big_list[-1].append(line)
pill
Ноя. 3, 2010 07:01:17
pasaranax
ой, не с двумя циклами, я имел ввиду вариант pill'а, но подправил бы его вот так:
Лаконичнее, но почему elif line.strip():?
Так ведь line.strip() уходит в никуда.
Наверное все же:
big_list = []
for line in in_file:
if line[0] == '[':
big_list.append([])
else:
big_list[-1].append(line.strip())
pasaranax
Ноя. 3, 2010 08:58:04
На случай такого входного файла:
[5й класс]
Иванов
Петров
[6й класс]
Сидоров
Пупкин
[7й класс]
Шлёпанцев
Коклюшкин
XPb14
Ноя. 3, 2010 09:37:19
pill Ваш сниппет неправильно работает, создаётся одномерный список, а в сниппете pasaranax всё как надо. Вот только я не могу понять чем второй вариант pasaranaxа лучше первого, не могли бы пояснить? дело только в понимании кода (“очевидности”)? Ну и спасибо конечно всем за помощь
сейчас задумался почему это не работает сниппет pillа, и чесно говоря просто стало лень разбираться, может я чего-то и напутал
pill
Ноя. 3, 2010 10:04:30
Проверил, вроде работает но кто его знает…
>>> pprint.pprint(big_list)
[, , ]
pasaranax
Ноя. 3, 2010 10:42:22
XPb14
Вот только я не могу понять чем второй вариант pasaranaxа лучше первого, не могли бы пояснить? дело только в понимании кода (“очевидности”)? Ну и спасибо конечно всем за помощь
Вообще-то, он совсем по другому действует. Первой строкой создается список с элементами - строками между двумя , при чем с мусором вроде покоцанного , а потом эти строки разбиваются по символу \n и записываются в этот же самый элемент.
А во втором варианте список просто ровно пополняется новыми элементами.
XPb14
Ноя. 3, 2010 11:32:18
понятно… и вот напишу для будущих поколений - достаточно веский недостаток первого способа (делящего по “\n”), что последняя строка должна быть пустой (тобиш после последнего элемента тоже должно быть “\n”)