Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
itertools.chain(*[l1, l2]) вместо itertools.chain(l1, l2)?matrix = [[1, 2, 3, 4], [6, 7, 8], [10, 11, 12]]
list(itertools.chain.from_iterable(matrix))
# [1, 2, 3, 4, 6, 7, 8, 10, 11, 12]
# dict_a = dict(x: x**2 for x in list_a) # invalid
dict_a = dict((x, x ** 2) for x in list_a) # valid
transposed = list(map(list, zip(*matrix)))
list_c = [t + t ** 2 for t in (x ** 3 + x ** 4 for x in range(-2, 4))]
days = [d + 1 for d in range(31) if d % 7 < 5]
А разве каждый первый день месяца начинается с понедельника? :-)
Ну, и на самом деле, не все так просто. В России есть много нерабочих дней, которые не попадают на выходные. И наоборот, несколько рабочих переносятся на выходные.
Поэтому такая наивная реализация подойдет не всем.
>>> range(100000000000000)
python(5218,0x7fff797dc000) malloc: *** mach_vm_map(size=800000000000000) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
File "", line 1, in MemoryError
В Python 2 были 2 функции:
range(...) которая аналогична выражению list(range(...)) в Python 3 — то есть она выдавала не итератор, а сразу готовый список;
Еще в itertools есть много полезных комбинаторных функций.
Например, itertools.permutations для генерации перестановок и itertools.product для создания декартовых произведений. Последнюю удобно использовать для генерации тестовых наборов данных.
transposed = [[row[i] for row in matrix] for i in range(len(matrix))]
for i in range(len(matrix)):
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
print(len(matrix)) # 3 - количество элементов первого уровня (строк)
print(len(matrix[0])) # 4 - количество элементов второго уровня (столбцов)
for i in range(len(matrix[0])):
Вообще-то всё вышеперечисленное тоже не рекомендуется для таких целей.Это где такие рекомендации?
Numpy.array.flatten() в несколько раз быстрее будет.Это правда только если у нас уже есть `Numpy.array`, а вот если у нас изначально обычный python список, то сначала нужно будет создать из него `Numpy.array` и только потом применить метод .flatten(), что в итоге будет в 10 раз медленнее чем при помощи itertools.


sum(a, [])
я был просто поражен !)
Python: коллекции, часть 4/4: Все о выражениях-генераторах, генераторах списков, множеств и словарей