do you master list comprehensions?

Steven Bethard steven.bethard at gmail.com
Tue Dec 14 18:21:16 CET 2004


Timothy Babytch wrote:
> Will Stuyvesant wrote:
> 
>>>>> data = [['foo','bar','baz'],['my','your'],['holy','grail']]
> 
> 
> sum(data, [])
> 
> ['foo', 'bar', 'baz', 'my', 'your', 'holy', 'grail']
> 
> The second parameter passed to sum is just to overrride default
> initial value "zero".
> 

It's worth keeping in mind that this solution has the same efficiency 
problems that a loop that =+ strings does:

 > python -m timeit -s "data = [range(10) for _ in range(100)]" 
"sum(data, [])"
1000 loops, best of 3: 530 usec per loop

 > python -m timeit -s "data = [range(10) for _ in range(100)]" "[w for 
d in data for w in d]"
10000 loops, best of 3: 151 usec per loop

 > python -m timeit -s "data = [range(10) for _ in range(1000)]" 
"sum(data, [])"
10 loops, best of 3: 54.2 msec per loop

 > python -m timeit -s "data = [range(10) for _ in range(1000)]" "[w for 
d in data for w in d]"
100 loops, best of 3: 1.75 msec per loop

The sum function used in this way (or a loop with a +=) is O(N**2) while 
the LC is O(N).

Steve



More information about the Python-list mailing list