Попробуйте использовать itertools, чтобы избежать дублирования списка дважды:
import itertools
flat= ['11','13', '17', '19', '13', '17', '19','22','35','14','15']
result = list(
map(list,
zip(
itertools.islice(flat, 0, len(flat), 2),
itertools.islice(flat, 1, len(flat), 2)
)
)
)
print(result)
или используйте iter
:
it = iter(flat)
[[x, y] for x, y in zip(it, it)]
Здесь у вас есть живой пример
Тесты с timeit
показывают, что решение iter
с пониманием списка является лучшим подходом:
import itertools
flat= ['11','13', '17', '19', '13', '17', '19','22','35','14','15']
def lcomprehension_aproach(flat):
return [[flat[a], flat[a+1]] for a in range(0, len(flat)-2, 2)]
def itertools_aproach(flat):
result = list(
map(list,
zip(
itertools.islice(flat, 0, len(flat), 2),
itertools.islice(flat, 1, len(flat), 2)
)
)
)
return result
def iter_aproach(flat):
it = iter(flat)
return [[x, y] for x, y in zip(it, it)]
print(lcomprehension_aproach(flat))
print(itertools_aproach(flat))
print(iter_aproach(flat))
from timeit import timeit
print(timeit("lcomprehension_aproach(flat)", globals=globals()))
print(timeit("itertools_aproach(flat)", globals=globals()))
print(timeit("iter_aproach(flat)", globals=globals()))
5.122298364993185 // время составления списка (решение Джека Эйдли)
8.221981940994738 // время itertools
3.757848952009226 // itert + время понимания