Comments 83
> к которой можно отнести и создание новых списков, и модификацию существующих.
Как, используя list comprehension, модифицировать существующий список?
Как, используя list comprehension, модифицировать существующий список?
+1
От условия в цикле можно избавиться используя defaultdict(int).
0
Есть еще замечательная штука generator expressions, похож на list comprehension, только создается не список, а его элементы. :) Памяти ест намного меньше. Как-то так. :)
0
Так и называется, потому что создается генератор элементов :)
Генераторы вообще отличная штука.
Генераторы вообще отличная штука.
0
List comprehension - это и есть генератор, пропущеный через функцию list() путём помещения в квадратные скобки. А вот если всё так не упрощать, можно получить всякие замечательные штуки, например, объект, генерирующий бесконечную последовательность, элемент за элементом.
0
Понятно, конечно, что xrange в первом примере статьи использовался как пример к последующему материалу, но применение range для создания списка нечетных числе выглядит более очевидным, да и работает быстрее. Впрочем, в Python 3000, если не ошибаюсь, range приобретет поведение xrange, а последний исчезнет.
Спасибо за статьи!
Спасибо за статьи!
+1
dic.has_key(x) не быстрее x in dic ??
0
Вызов метода происходит дольше. И вообще, метод has_key, вроде, устаревшим уже считается.
+1
именно. :) мне пришлось переучиваться.
кстати, open вроде тоже depricated... надо пользовать file.
кстати, open вроде тоже depricated... надо пользовать file.
0
По крайней мере для 2.5 документация рекомендует для открытия файлов использовать именно
open
, а file
оставить как тип. Поменялось ли что-то по этому поводу в 3.0, не помню.0
http://docs.python.org/lib/bltin-file-ob…
или я что-то неправильно понял?
или я что-то неправильно понял?
0
То, что
file
новее open
и идентичен ему, не значит, что старая функция стала deprecated. Раздел built-in functions рекомендует семантическое разделение, которое я полностью поддерживаю.0
for line in file читается лучше, чем for line in open.
+1
UFO just landed and posted this here
"list comprehensions" часто переводят, как "генераторы списков"
0
фак май брайн!
А питон, я на него смогу перейти с php?
А питон, я на него смогу перейти с php?
+1
разумеется перейдешь) я с нуля питон осознал за 30 минут.. :) До этого вообще ни на чем не программил :) Отличный язык)
+1
Ну ты меня успокойил, может у мну моск не столько функционален как твой))
попробуем
попробуем
+1
Перейти с PHP на Python легко, а вот обратно сложновато. Потому что не хочется. :)
+7
Раз уж проскочила lamda, дальше лучше про функциональное программирование. За статьи спасибо. Давно хотел почитать, но было лень, а тут все готовое :)
0
Спасибо за статью. Примеры достаточно интересные, вроде бы и раньше про это знал, однако на практике часто забываю.
"# 2 заполняем словарь" можно чуток сократить
rmp = {}
for ip, traffic in raw:
rmp[ip] = rmp.get(ip, 0) + int(traffic)
"# 2 заполняем словарь" можно чуток сократить
rmp = {}
for ip, traffic in raw:
rmp[ip] = rmp.get(ip, 0) + int(traffic)
0
можно. я пытался не запутать все совсем окончательно :)
0
from collections import defaultdict
rmp = defaultdict(int)
for ip, bytes in raw:
rmp[ip] += int(bytes)
Так гораздо приятнее, по-моему :)
rmp = defaultdict(int)
for ip, bytes in raw:
rmp[ip] += int(bytes)
Так гораздо приятнее, по-моему :)
0
вариант не мой, но внушает :)
свернуть по вкусу.
l = (lambda f:
(lambda l: l.sort(reverse = True, key = lambda (k, v): v) or l)(
(lambda m, f:
filter(
lambda (i, t):
m.__setitem__(i, m.get(i, 0) + int(t)),
[j.split(' ') for j in file(f, 'r').readlines()]
) or m.items()
)({}, f)
)
)('in.txt')
print '\n'.join('%s = %d' % (i, t) for (i, t) in l)
свернуть по вкусу.
0
на счет дельнеших уроков - я за ООП.. ибо питон сам по себе ООП язык - он на это больше их ориентирован
0
Присоединяюсь! Хотелось бы почитать о «new-style» классах.
0
class MyClass:
# old-style class
pass
class MyClass(object):
# new-style class
pass
Как-то так (:
# old-style class
pass
class MyClass(object):
# new-style class
pass
Как-то так (:
0
ага, только еше super, mro и метапрограммирование.
0
ага, только еще super, mro и метапрограммирование.
0
Ну, это-то я знаю... Хотелось бы почитать про идеологические различия и про то, почему в Python 3000 все классы станут «new-style».
0
Раз уш использовали xrange то и вместо for name, salary in dic.items() лучше for name, salary in dic.iteritems() :)
А вообще спасибо) давайте продолжим ООП?)
А вообще спасибо) давайте продолжим ООП?)
0
Вы бы добавили про разницу range и xrange...
range создает список, а затем по нему проходит. Если список очень большой, то он будет жить в памяти и сожрет много ресурсов.
xrange возвращает "xrange object". Каждый элемент поочередно создается и передается, затем память освобождается.
Например, x = range(0,10) создаст list и передаст его переменной x.
>>> print x
[1, 2, 3, 4, 5, 6, 7, 8, 9]
С xrange такой фокус не прокатит:
>>> x = xrange(0,10)
>>> print x
xrange(10)
range создает список, а затем по нему проходит. Если список очень большой, то он будет жить в памяти и сожрет много ресурсов.
xrange возвращает "xrange object". Каждый элемент поочередно создается и передается, затем память освобождается.
Например, x = range(0,10) создаст list и передаст его переменной x.
>>> print x
[1, 2, 3, 4, 5, 6, 7, 8, 9]
С xrange такой фокус не прокатит:
>>> x = xrange(0,10)
>>> print x
xrange(10)
+1
Спасибо, очень интересно и практично. Не оторвано от реально жизни...
Как по мне, так ООП и так мейн стрим, найти инфу, что про него, что про ООП в питоне ю не так уж и сложно.
А вот с функциональным, все гораздо печальней. Найти материал, для чего функциональное программирование может быть полезным, не математику да еще и в питоне, не такто легко.
Так что обеими руками за функциональное программирование.
Как по мне, так ООП и так мейн стрим, найти инфу, что про него, что про ООП в питоне ю не так уж и сложно.
А вот с функциональным, все гораздо печальней. Найти материал, для чего функциональное программирование может быть полезным, не математику да еще и в питоне, не такто легко.
Так что обеими руками за функциональное программирование.
0
http://www.developers.org.ua/archives/ad…
вот неплохая статья "зачем" :) а "как" - постараюсь вскоре рассказать :)
вот неплохая статья "зачем" :) а "как" - постараюсь вскоре рассказать :)
0
Спасибо за ссылку! Кажется даже читал в свое время :)
Но опять же, даже эта статья не дает простых, чётких примеров. Она интригует и манит, обещая невероятные чудеса... но не показывает их :)
Хотя думаю на деле все проще, и разница примерно как между Windows vs Linux. Фанаты спорят до хрипоты, а разумные так или иначе используют и то и другое. :)
Поэтому очень хочется увидеть в примерах, как это может упростит наш тяжелы, бессмысленный труд :)
PS - чую, что как человеку разрабатывающему на JavaScript, многие вещи окажутся очень знакомыми. Я же правильно понимаю, что анонимные ф-ции, замыкания и map reduce это все из ф-циональной оперы?
Но опять же, даже эта статья не дает простых, чётких примеров. Она интригует и манит, обещая невероятные чудеса... но не показывает их :)
Хотя думаю на деле все проще, и разница примерно как между Windows vs Linux. Фанаты спорят до хрипоты, а разумные так или иначе используют и то и другое. :)
Поэтому очень хочется увидеть в примерах, как это может упростит наш тяжелы, бессмысленный труд :)
PS - чую, что как человеку разрабатывающему на JavaScript, многие вещи окажутся очень знакомыми. Я же правильно понимаю, что анонимные ф-ции, замыкания и map reduce это все из ф-циональной оперы?
0
в общем - по всем пунктам вы правы. даже и добавить нечего :)
0
нет, функции высшего порядка, замыкания и свёртки не являются прерогативой фп. лексические замыкания, например, появились первыми в императивных языках, потом их подхватили функциональные, потом императивные позаимствовали у функциональных функции высшего порядка и свёртки.
0
list comprehension => списковое включение (?)
0
возможно. не могу спорить, но мне этот термин почему-то кажется каким-то громоздким и непонятным. ъотя омжет я не прав.
0
Общепринятого перевода нет, насколько я знаю, даже для соответствующего теоретико-множественного понятия, от которого и пошёл английский термин. Все равно тащить математические истоки не получится, ZF-нотация будет звучать совсем дико. Списковые включения, списковые выделения…
0
>print "\n".join(["%s = %d" % (name, salary) for name, salary in dic.items()])
моожно так print "\n".join("%s = %d" % (name, salary) for name, salary in dic.items())
Ваш вариант генерит список и он отдаётся дойну, второй вариант создаёт генератор на пододе xrange.
А вообще продолжайте в том же духе, пусть народ пишет на питон "правильно" :)
моожно так print "\n".join("%s = %d" % (name, salary) for name, salary in dic.items())
Ваш вариант генерит список и он отдаётся дойну, второй вариант создаёт генератор на пододе xrange.
А вообще продолжайте в том же духе, пусть народ пишет на питон "правильно" :)
0
if ip in rmp: rmp[ip] += int(traffic)
else: rmp[ip] = int(traffic)
ужос. так нельзя?
if ip in rmp: rmp[ip] = ( rmp[ip] || 0 ) + int(traffic)
else: rmp[ip] = int(traffic)
ужос. так нельзя?
if ip in rmp: rmp[ip] = ( rmp[ip] || 0 ) + int(traffic)
0
А на хабре никак нельзя использовать подсветку кода? Ну или хотя бы форматирование что бы сохраняло - удобнее читать. А то через строчку - неудобно, да и преимущество форматирования табами - не так заметно.
Ну и стоило сказать,что не надо увлекаться подобного рода сахаром в явный ужерб читабельности :)
Ну и стоило сказать,что не надо увлекаться подобного рода сахаром в явный ужерб читабельности :)
0
Скажите, а продолжение будет?
И не подскажите где можно найти разнообразных задачек?
И не подскажите где можно найти разнообразных задачек?
0
спасибо за хороший цикл статей, надеюсь, что напишите-таки продолжение.
и просьба-совет — было бы очень удобно, если бы в начале давались ссылки на остальные статьи этого цикла.
и просьба-совет — было бы очень удобно, если бы в начале давались ссылки на остальные статьи этого цикла.
0
Действительно отличный цикл статей для людей, который вообще с пайтоном не знакомы (как я :)).
Но последний пример можно реализовать в 8 строк читаемого кода на PHP (в примере я насчитал 10):
Но последний пример можно реализовать в 8 строк читаемого кода на PHP (в примере я насчитал 10):
+1
Sign up to leave a comment.
Основы Python — кратко. Часть 4. Генераторы списков