flatten a level one list
Michael Spencer
mahs at telcopartners.com
Wed Jan 11 22:14:03 EST 2006
> Robin Becker schrieb:
>> Is there some smart/fast way to flatten a level one list using the
>> latest iterator/generator idioms.
...
David Murmann wrote:
> Some functions and timings
...
Here are some more timings of David's functions, and a couple of additional
contenders that time faster on my box (I don't have psyco):
# From David Murman
from itertools import izip
xdata = range(1000)
ydata = range(1000)[::-1]
def flatten1(x, y):
return [i for pair in izip(x, y) for i in pair]
def flatten2(x, y):
return [i for pair in zip(x, y) for i in pair]
def flatten3(x, y):
res = []
for pair in izip(x, y):
for i in pair:
res.append(i)
return res
# New attempts:
from itertools import imap
def flatten4(x, y):
l = []
list(imap(l.extend, izip(x, y)))
return l
from Tkinter import _flatten
def flatten5(x, y):
return list(_flatten(zip(x, y)))
flatten_funcs = [flatten1, flatten2, flatten3, flatten4, flatten5]
def testthem():
flatten1res = flatten_funcs[0](xdata, ydata)
for func in flatten_funcs:
assert func(xdata, ydata) == flatten1res
def timethem():
for func in flatten_funcs:
print shell.timefunc(func, xdata, ydata)
>>> testthem()
>>> timethem()
flatten1(...) 704 iterations, 0.71msec per call
flatten2(...) 611 iterations, 0.82msec per call
flatten3(...) 344 iterations, 1.46msec per call
flatten4(...) 1286 iterations, 389.08usec per call
flatten5(...) 1219 iterations, 410.24usec per call
>>>
Michael
More information about the Python-list
mailing list