Форум сайта python.su
ой, не с двумя циклами, я имел ввиду вариант pill'а, но подправил бы его вот так:
big_list = []
for line in in_file:
if line[0] == '[':
big_list.append([])
elif line.strip():
big_list[-1].append(line)
Офлайн
pasaranaxЛаконичнее, но почему elif line.strip():?
ой, не с двумя циклами, я имел ввиду вариант pill'а, но подправил бы его вот так:
big_list = []
for line in in_file:
if line[0] == '[':
big_list.append([])
else:
big_list[-1].append(line.strip())
Офлайн
На случай такого входного файла:
[5й класс]
Иванов
Петров
[6й класс]
Сидоров
Пупкин
[7й класс]
Шлёпанцев
Коклюшкин
Офлайн
pill Ваш сниппет неправильно работает, создаётся одномерный список, а в сниппете pasaranax всё как надо. Вот только я не могу понять чем второй вариант pasaranaxа лучше первого, не могли бы пояснить? дело только в понимании кода (“очевидности”)? Ну и спасибо конечно всем за помощь
сейчас задумался почему это не работает сниппет pillа, и чесно говоря просто стало лень разбираться, может я чего-то и напутал
Отредактировано (Ноя. 3, 2010 09:53:55)
Офлайн
Проверил, вроде работает но кто его знает…
>>> pprint.pprint(big_list)
[, , ]
Офлайн
XPb14Вообще-то, он совсем по другому действует. Первой строкой создается список с элементами - строками между двумя , при чем с мусором вроде покоцанного , а потом эти строки разбиваются по символу \n и записываются в этот же самый элемент.
Вот только я не могу понять чем второй вариант pasaranaxа лучше первого, не могли бы пояснить? дело только в понимании кода (“очевидности”)? Ну и спасибо конечно всем за помощь
Офлайн
понятно… и вот напишу для будущих поколений - достаточно веский недостаток первого способа (делящего по “\n”), что последняя строка должна быть пустой (тобиш после последнего элемента тоже должно быть “\n”)
Офлайн