Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определение максимальной длины элемента списка, нужно записать оной строкой 
V
    Опции темы
pythonwin
Дата 23.8.2006, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Всем привет!

Пожалуйста, подскажите, как ниже описанный код записать одной строкой

Код

l=[[1,2,3,4],[1,2,3],[1,2,3,4,5,6,7],[1,2]]; max=0
for x in l:
    if max<len(x): max=len(x)

PM WWW GTalk Jabber   Вверх
albertn
Дата 23.8.2006, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Все просто
Код

max(map(len,[[1,2,3,4],[1,2,3],[1,2,3,4,5,6,7],[1,2]]))

PM WWW ICQ   Вверх
pythonwin
Дата 23.8.2006, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



а как вернуть самый длинный элеммент списка?
PM WWW GTalk Jabber   Вверх
albertn
Дата 23.8.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(pythonwin @ 23.8.2006,  09:25)
а как вернуть самый длинный элеммент списка?

Питон может все
Код

reduce(lambda x,y: len(x)>=len(y) and x or y,[[1,2,3,4],[1,2,3],[1,2,3,4,5,6,7],[1,2]])

PM WWW ICQ   Вверх
pythonwin
Дата 23.8.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



albertn, по каким правилам ты используешь эти функции - где можно прочитать подробно как правильно использовать and, or, map, reduce, filter, при этом используя их вместе?
PM WWW GTalk Jabber   Вверх
albertn
Дата 23.8.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(pythonwin @ 23.8.2006,  09:43)
albertn, по каким правилам ты используешь эти функции - где можно прочитать подробно как правильно использовать and, or, map, reduce, filter, при этом используя их вместе?

У меня была толковая книга по питону, в которой только вкратце описывались эти функции. В основном я их изучал методом научного тыка и на чьих-то примерах (ковырялся в исходниках Zope).
Если кому интересно, я могу привести примерный исходник этих функций
PM WWW ICQ   Вверх
MAKCim
Дата 23.8.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата

по каким правилам ты используешь эти функции - где можно прочитать подробно как правильно использовать and, or, map, reduce, filter, при этом используя их вместе?

тут хорошая книга
а вообще ничего сложного
главное знать, что эти функции получают за аргументы и что возвращают
тот же
Цитата

Код

reduce(lambda x,y: len(x)>=len(y) and x or y,[[1,2,3,4],[1,2,3],[1,2,3,4,5,6,7],[1,2]])


reduce получает два параметра - последовательность и бинарную функцию
сначала берется два первых элемента последовательности и передаются в функцию, затем результат этой функции и следующий элемент последовательности опять в нее передаются и так далее, пока не будет достигнут конец последовательности
Бинарная функция в данном случае представлена lambda-функцией
а синтаксис len(x)>=len(y) and x or y
эквивалентен сишному
Код

return x.size()>=y.size() ? x: y;

или shell-овскому
Код

test $x -ge $y && echo "x>=y" || echo "x<y"



Это сообщение отредактировал(а) MAKCim - 23.8.2006, 10:10


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
pythonwin
Дата 23.8.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(albertn @  23.8.2006,  16:48 Найти цитируемый пост)
Если кому интересно, я могу привести примерный исходник этих функций 


Было бы очень хорошо!

И спасибо за помощь!
+1
PM WWW GTalk Jabber   Вверх
albertn
Дата 23.8.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Я не проверял, но логика должна быть такая:
Код

def map(f,l):
    res = []
    for x in l:
        res.append(f(x))
    return res

Код

def reduce(f,l,s=None):
    if s is None:
        res = l[0]
    else:
        res = f(s,l[0])
    for x in l[1:]:
        res = f(res,x)
    return res

Код

def filter(f,l):
    res = []
    for x in l:
        if f(x):
            res.append(f(x))
    return res

а также цепочка операторов and в случае истинности всех членов возвращает послендний элемент, а если есть хоть один ложный, то она возвращает первый ложный.
С or все просто восзвращает первый истинный. Главное, никого и нивочто не преобразовывают.
PM WWW ICQ   Вверх
pythonwin
Дата 23.8.2006, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



albertn, странно, но думал что эти три функции реализованы в C. т.к. они читал, что они быстрее циклов.
PM WWW GTalk Jabber   Вверх
albertn
Дата 23.8.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(pythonwin @ 23.8.2006,  10:50)
albertn, странно, но думал что эти три функции реализованы в C. т.к. они читал, что они быстрее циклов.

Естественно они написаны на си, я просто привел алгоритм работы, никак не связанный с оригиналом. Ну не на си же мне питоновские функции описывать.
PM WWW ICQ   Вверх
pythonwin
Дата 23.8.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(albertn @  23.8.2006,  17:53 Найти цитируемый пост)

Естественно они написаны на си, я просто привел алгоритм работы, никак не связанный с оригиналом. Ну не на си же мне питоновские функции описывать. 

 smile  Спасибо!

Добавлено @ 11:15 
Спасибо всем кто мне помог!
PM WWW GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.