Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 8, 2010 18:26:38

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Склейка нескольких подряд идущих букв

Да я не к этому. :-)

Где-то полтора года назад я написал на pydev.ru небольшую недостатью про приёмы функционального программирования в питоне. j2a, кажется, попытался объяснить мне, что не стоит использовать это в коде, ибо не читаемо… Но у него ничего не получилось. А жаль.
Так что я только о том, что оно несомненно красиво, но в реале использовать нужно очень и очень осторожно и ограниченно. Ну и пояснять не забывать.



Офлайн

#2 Янв. 8, 2010 19:22:34

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Склейка нескольких подряд идущих букв

Ed,

print " ".join([w.replace(" ", "") for w in re.split(r"(\S{2,})", line)])



Офлайн

#3 Янв. 8, 2010 23:22:12

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Склейка нескольких подряд идущих букв

Мне нравится ход ваших мыслей :). Но этот вариант оставляет лишний пробел между “вас” и “всех”.
Кроме того нужно добавить import re в код.



Офлайн

#4 Янв. 8, 2010 23:54:57

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Склейка нескольких подряд идущих букв

Ed
Мне нравится ход ваших мыслей smile. Но этот вариант оставляет лишний пробел между “вас” и “всех”.
Кроме того нужно добавить import re в код.
ну можно еще вставить в конце .replace(“ ”, “ ”), но это займет столько много места.. :) думаю, можно еще голову поломать над регекспом, чтобы убрать двойные пробелы (которые, по секрету говоря, будут вылезать между каждыми двумя “нормальными” словами).

п.с. все, пофиксил:
print " ".join([w.replace(" ", "") for w in re.split(r"(\S{2,})", line) if w.strip()])
думаю, вариант с регекспами будет сильно медленнее тех, что выше



Отредактировано (Янв. 8, 2010 23:58:58)

Офлайн

#5 Янв. 9, 2010 00:38:21

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Склейка нескольких подряд идущих букв

Я тут подумал, что strip() не нужен:

print "".join([s.center(len(s)+(len(s)>1)*2) for s in line.split()]).replace("  ", " ")
PS: A ‘import re’ вы так и не добавили. Так нечестно :)



Отредактировано (Янв. 9, 2010 00:49:26)

Офлайн

#6 Янв. 9, 2010 00:54:30

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Склейка нескольких подряд идущих букв

Ed
Я тут подумал, что strip() не нужен:
без стрипа в конце лишний пробел )



Офлайн

#7 Янв. 9, 2010 14:46:51

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Склейка нескольких подряд идущих букв

Ed
PS: A ‘import re’ вы так и не добавили. Так нечестно
__import__('re').split(r"(\S{2,})", line)
:-)



Офлайн

#8 Янв. 9, 2010 20:37:35

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Склейка нескольких подряд идущих букв

Знатное извращение. Ноя думал просто добавить import re; перед кодом. Останется та же одна строчка, только длиннее.
pasaranax: Да, вы правы, остается пробел в конце. Возвращаю обратно.



Офлайн

#9 Янв. 9, 2010 20:40:37

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Склейка нескольких подряд идущих букв

Ed
добавить import re; перед кодом
Это уже как-то не совсем однострочник получается.
Думаю, из этой задачи врядли можно больше выжать, надо новую )



Офлайн

#10 Янв. 9, 2010 21:14:07

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Склейка нескольких подряд идущих букв

Ed
Знатное извращение.
Ага…

Ed
Ноя думал просто добавить import re; перед кодом.
Вся ценность этого прикола в том, что это expression!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version