Wed, 13 Sep 2006

python list generation optimization

Menno Smits recently made some cleanups to yum's RPMDBPackageSack class. In a mail to the yum-devel list, Menno points out that python's list comprehension turns out to be 20% faster than using a for loop while appending items to a list.

A simple benchmark script shows the speed increase claim to be true. Menno's script test two different methods, the first being the standard for/list.append() loop.

l1 = []
for x in xrange(LOOPS):
    if x % 2 == 0:
        l1.append(x)

The second being list comprehension:

l2 = [x for x in xrange(LOOPS) if x % 2 == 0]

Both methods utilize python's xrange, which is a generator object written in pure C, and is faster than the plain old range. Out of curiosity, I went ahead and modified this script to test a few more methods of generating the same list as above.

Using a for loop, and an append function reference:

l3 = []
append = l3.append
for x in xrange(LOOPS):
    if x % 2 == 0:
        append(x)

Using the filter/lambda approach:

l4 = filter(lambda x: x % 2 == 0, xrange(LOOPS))

Using filter and a function reference to the lambda:

x = lambda x: x % 2 == 0
l5 = filter(x, xrange(LOOPS))

The results were actually quite surprising. Using a modified version of Menno's script, I came up with these results after 10 iterations. The percentages are compared to the standard for loop/list.append() method.

for loop/append function reference: 23% faster list comprehension: 36% faster filter/lambda: 40% faster filter/reference to lambda: 57% faster

As it turns out, using the filter/lambda approach seems to shave off ~57% of the usual overhead from the for/list.append() approach.

Although extremely powerful, filter/map/lambdas tend to compact code, thus making it more difficult to read/maintain. This reason alone may cause people to completely stay away from them all together.

Avoiding powerful language features because of 'readability' can be a mistake in my opinion. Any competent programmer should have the ability to make their code understandable to anyone -- yes, it may actually require writing comments. Even the most complex regular expressions can be written so they can be understood easily (see Five Habits for Successful Regular Expressions).

I still tend to agree with Donald Knuth's statement "Premature optimization is the root of all evil". Jumping right into a complex algorithm with maps/filters/lambdas/etc may not be the best idea, and will most likely make it a nightmare to debug down the road.


posted at: 19:11 | link | Tags: , | 6 comments

Posted by farsats at Thu Aug 19 05:36:25 2010

Для желающих прорекламировать свой сайт или услуги (можно без сайта) в  интернете предлагаю
услуги по размещению Вашей рекламы на многих сайтах интернета в ручном или автоматическом
режимах:
- Ручное размещение на 3000 интернет-досок 100$ даю отчет в виде базы ссылок где разместил
рекламу. Там где необходимо делаю активацию по email.Размещение делается в соответствующие
категории (не спам) и выбором срока размещения.
- Автоматическое размещение на 20тысяч интернет-досок 100$ .После рассылки в Яндексе появляется
ппримерно 10тысяч ссылок что дает дополнительно посетителей из Яндекс каталога причем по
большему количеству ключевых слов что еще улучшает эффект.
- Автоматическое размещение на 150тысяч форумов 50$

Количество сайтов указаное в этой рекламе это количество успешных регистраций, а не вся база.
e-mail: dawr65@mail.ru

Posted by bewameris at Sat Sep 11 12:17:49 2010

Подам Вашу рекламу во многие сайты интернета заказы отправляйте на web8@km.ru :

1.Подать рекламное сообщение в 3050 доски бесплатных объявлений интернета
(эторучная подача не програмой) 99$. Меняется текст и подбираются
высокочастотные ключевые по Вашей теме.
2.Подать рекламное сообщение в 21500 доски бесплатных объявлений интернета
(авторассылка лицензионной програмой)99$. Тоже меняется текст и подбираются
высокочастотные ключевые.Много ссылок  получается а Яндексе или Гугле около 11тысяч.
3.В интернет-форумы 60$ на 175000 много ссылок в Гугле получается можно текст менять.
4.Податьвручную рекламное сообщение в 21500 доски бесплатных объявлений
интернета 499$
5.Пункты 1+2+3 199$

Posted by talleroxs at Tue Oct 19 23:30:14 2010

Вдоски 3010 штук девяностодевять доларов использую выс.част. ключевые и несколько
вариантов текста это дает лучший результат. этовруччную делается.
Вдоски програмой 21550 штук девяностодевять доларов тоже выс.част. ключевые и несколько вариантов текста
обычно в поис.сист. приблизительно десятьтыс. сс-лок навашсайт.
Всайты наваш выбор девяностодевять доларов на 2100 штук (сосбором) тоже выс.част. ключевые
и несколько вариантов текста (руч.работа)
Собрать информацию в интернете (url, e-mail, icq и др.) девяностодевять доларов за тыс.
Вфоррумы сто восемдесят тыс. штук девяностодевять доларов (выс.част. ключевые ....)
Контактный: has6532@mail.ru

Posted by wopasim at Sat Oct 23 00:26:12 2010

При выполнении работ для Ваших сообщений будут подобраны слова которые чаще других используют
люди при поиске в поисковых системах, вариантв сообщений .Стоимосьть каждого пункта девяностосемь дол-ров

На 2999 электр. досках интернета не автоматич. а с помощью рук
В электр. досках автомат. количество 19999
Нафорумы автоматич. 178000
Сборбазз (пот.клиентов, имэйлы и т.п.) за 1000 - девяностосемь дол-ров
В те сайты которые Вы хотите (с помощью рук на 2999 или автомат. на 15000)
nel763@mail.ru

Posted by mnzxweds at Sat Apr 7 03:48:58 2012

http://mero74.narod2.ru Adobe InDesign обеспечивает добросовестный контроль над типографикой и предоставляет встроенные инструменты дизайна.

Posted by drrvcfgsucl at Wed Oct 24 05:40:25 2012

Mariupol
Tuxpan
El Pino


<a href=http://cheaphatsclub.wikispaces.com/>http://cheaphatsclub.wikispaces.com/</a>
<a href=outletdress.blogspot.es>outletdress.blogspot.es</a>
<a href=http://newkarenmillen.blogsport.de>http://newkarenmillen.blogsport.de</a>


Maribel
Lynn


Name:


E-mail:


URL:


Comment: