Разум проснулся: Python itertools
С подсказки Вани в комментариях к предыдущему посту посмотрел itertools. И вот что я вам скажу товарищи. Если
from itertools import groupby, chain, starmap
def ntrim(letter, n=3, replby=1):
return list(chain(
*starmap(
lambda item, grp: [grp, [''] * replby][item and len(grp)>=n],
((item, list(grp)) for item, grp in
groupby(chain(['']*n, letter, ['']*n), lambda x:x)
)
)
))[replby:-replby]Я модифицировал исходную задачу: последовательности из трёх и более пустых строк заменяются на одну, пустые элементы в начале и конце списка удаляются. И ещё я прибил ленивый триплет из Python 2.5, потому что на домашнем ноуте у меня 2.5, а на рабочем сервере будет 2.4. Надо, кстати, будет посмотреть не цепляется ли он
Комментарии 13
-- Rick Osborne
Мне кажется, что в данном случае можно и без адреса обойтись. Сразу бомбой.
Но вообще я тоже питон люблю именно за то, что можно использовать совершенно разные парадигмы программирования.
Я задачу изменил, там генератор не подойдёт, так как есть выбор. Кстати, в чём глупость моего «item==''» понял только ночью. Привык в PHP, что '0'==0
starmap(lambda item, grp: …, …)
реально проще:
(… for item, grp in …)
return list(
chain(
*(
[[''], grp][item or len(grp)
Потому что на его переделку у того, кто не имеет лисповой и вообще функциональной передлки уйдут часы.