Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 11, 2009 14:29:55

pTree
От:
Зарегистрирован: 2008-08-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Скорее развлечение чем вопрос

Потребовалось мне написать функцию нахождения максимальной длинны строки из списка строк. Другими словами имеем следующий список строк:

l = ['ab', 'bcd', 'cda', 'bababa', 'c']
после обработки функцией вышеуказанного списка на выходе должно быть число 6 соответсвующее длинне строки ‘bababa’

Собственно ничего сложного нет. Я сходу нарисовал вот такое решение
def maxLen(myList):
maxi = 0
for item in myList:
if maxi < len(item):
maxi = len(item)
return maxi
но уж больно страшно и коряво это выглядит :-(. Немного погодя родился такой вариант
def maxLen(myList):
return max(map(lambda x: len(x),myList))
коротко, лаконично, но с первого взгляда не поймешь что тут происходит. Без комментариев не обойтись.

Я вот тут подумал. Может уважаемые эксперты предложат, что-нибудь красивое и гармоничное?



Офлайн

#2 Ноя. 11, 2009 14:43:16

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Скорее развлечение чем вопрос

pTree
коротко, лаконично, но с первого взгляда не поймешь что тут происходит.
По-моему, в данном блоке кода само название функции наталкивает на то, что происходит… Вполне нормально с первого взгляда воспринимается.



Офлайн

#3 Ноя. 11, 2009 14:45:25

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Скорее развлечение чем вопрос

возвращает строку максимальной длины.

max(myList, key=lambda item: len(item))



Офлайн

#4 Ноя. 11, 2009 14:57:59

k0sh
От:
Зарегистрирован: 2009-10-08
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Скорее развлечение чем вопрос

def max_len(myList):
return len(reduce(lambda x, y: len(x)<len(y) and y or x , myList))



Отредактировано (Ноя. 11, 2009 14:58:31)

Офлайн

#5 Ноя. 11, 2009 15:40:35

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

Скорее развлечение чем вопрос

max()



Офлайн

#6 Ноя. 11, 2009 16:22:10

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Скорее развлечение чем вопрос

max(map(len, l))



Офлайн

#7 Ноя. 11, 2009 16:23:16

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

Скорее развлечение чем вопрос

truporez
возвращает строку максимальной длины.
max(myList, key=lambda item: len(item))
можно просто max(l, key=len)



Офлайн

#8 Ноя. 11, 2009 21:10:34

pTree
От:
Зарегистрирован: 2008-08-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Скорее развлечение чем вопрос

Похоже что

max(l, key=len)
гораздо лучше и понятнее чем у меня. Вот только мне нужна не самая длинная строка списка, а максимальная длинна строки, другими словами число.
len(max(l, key=len))
Вот так будет как раз то что мне надо.
Смущает только повторное применение len(). По сути мы два раза делаем одно и тоже (вычисляем длинну строки), но в любом случае этот вариант пока наиболее лаконичен и понятен.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version