В jQuery я главным образом использую:
$("#element").trigger("change");
tuple(x for sublist in base_lists for x in sublist)
Правка : обратите внимание, что с base_lists
настолько коротким, genexp (с неограниченной доступной памятью) работает медленно. Рассмотрим следующий файл tu.py
:
base_lists = [[a, b] for a in range(1, 3) for b in range(1, 6)]
def genexp():
return tuple(x for sublist in base_lists for x in sublist)
def listcomp():
return tuple([x for sublist in base_lists for x in sublist])
def withsum():
return tuple(sum(base_lists,[]))
import itertools as it
def withit():
return tuple(it.chain(*base_lists))
Теперь:
$ python -mtimeit -s'import tu' 'tu.genexp()'
100000 loops, best of 3: 7.86 usec per loop
$ python -mtimeit -s'import tu' 'tu.withsum()'
100000 loops, best of 3: 5.79 usec per loop
$ python -mtimeit -s'import tu' 'tu.withit()'
100000 loops, best of 3: 5.17 usec per loop
$ python -mtimeit -s'import tu' 'tu.listcomp()'
100000 loops, best of 3: 5.33 usec per loop
Когда списки длиннее (т.е. когда производительность действительно имеет значение), все обстоит немного иначе. Например, установка 100 *
в правой части, определяющей base_lists
:
$ python -mtimeit -s'import tu' 'tu.genexp()'
1000 loops, best of 3: 408 usec per loop
$ python -mtimeit -s'import tu' 'tu.withsum()'
100 loops, best of 3: 5.07 msec per loop
$ python -mtimeit -s'import tu' 'tu.withit()'
10000 loops, best of 3: 148 usec per loop
$ python -mtimeit -s'import tu' 'tu.listcomp()'
1000 loops, best of 3: 278 usec per loop
, поэтому только для длинных списков withsum
приведет к катастрофе производительности - остальные находятся в тот же примерный, хотя очевидно, что itertools
имеет преимущество, а понимание списков (когда доступно много памяти, как это всегда будет в микробенчмарках ;-) быстрее, чем genexps.
Использование 1000 *
, genexp замедляется примерно в 10 раз (относительно 100 *
), withit и listcomp примерно в 12 раз,
>>> arr=[]
>>> base_lists = [[a, b] for a in range(1, 3) for b in range(1, 6)]
>>> [ arr.extend(i) for i in base_lists ]
[None, None, None, None, None, None, None, None, None, None]
>>> arr
[1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5]
>>> tuple(arr)
(1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5)
from itertools import chain
base_lists = [[a, b] for a in range(1, 3) for b in range(1, 6)]
print tuple(chain(*base_lists))
>>> sum(base_lists,[])
[1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5]
>>> tuple(sum(base_lists,[]))
(1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5)
result_tuple = tuple (элемент для l в base_lists для элемента в l)