Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
def listmerge(lst):
res = []
for el in lst:
res += listmerge(el) if isinstance(el, list) else [el]
return res
import itertools
listmerge = lambda lst: list(itertools.chain(*(el for el in lst)))
(defun listmerge (list)
(if (null list)
nil
(append (car list) (listmerge (cdr list)))
)
)
(listmerge '((1 2) (3) (5) (4 6)))
(1 2 3 5 4 6)merge = foldr [] (++)
main = print ( merge [ [1, 2], [3, 4], [5, 6] ] )
>[1,2,3,4,5,6]
def iter_flatten(iterable):
it = iter(iterable)
for e in it:
if isinstance(e, (list, tuple)):
for f in iter_flatten(e):
yield f
else:
yield e
L1 = [random:uniform(1000) || N <- lists:seq(1, 1000000)].
timer:tc(lists, flatten, [L1, [L2, L3], L4]).
>{250000,
[93,444,724,946,502,312,598,916,667,478,597,143,210,698,160,
559,215,458,422,6,563,476,401,310,59,579,990|...]}
def listmerge(lstlst):
all=[]
for lst in lstlst:
all.extend(lst)
return all
list_over_9000 = listmerge([list(xrange(1000))*1000, list(xrange(1000))*1000, list(xrange(1000))*1000, list(xrange(1000))*1000])
print "len = %s" % len(list_over_9000)
C:\Users\user\Desktop\pff>python -m cProfile list.py
len = 4000000
10 function calls in 0.155 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.155 0.155 <string>:1(<module>)
1 0.081 0.081 0.155 0.155 list.py:1(<module>)
1 0.000 0.000 0.073 0.073 list.py:1(listmerge)
1 0.001 0.001 0.155 0.155 {execfile}
1 0.000 0.000 0.000 0.000 {len}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
4 0.073 0.018 0.073 0.018 {method 'extend' of 'list' objects}
>>>a = list(xrange(1000))*1000 >>>a[999] is a[1999] True
>>>a = list(xrange(1000))*1000 >>>id(a[999]) == id(a[1999) == id(2999) == ... True
def test(l1, l2, l3, l4): list_over_9000 = listmerge([l1, l2, l3, l4]) print "len = %s" % len(list_over_9000) l1, l2, l3, l4 = list(xrange(1000000)), list(xrange(1000000)), list(xrange(1000000)), list(xrange(1000000)) test(l1, l2, l3, l4)
6 способов слияния списка списков