Какова временная и пространственная сложность операции реверсирования some_list [:: - 1] в CPython? - PullRequest
0 голосов
/ 31 января 2020

Простой пример кода для представления дела:

a = [1,2,3,4]
b = [ do_sth(x) for x in a[::-1] ]

1) Какова временная и пространственная сложность операции CPython для [:: - 1] в целом?

2) В приведенном выше примере кода CPython создает некоторое временное значение для [:: - 1] до тех пор, пока l oop не завершит sh или не пересчитает значение обратного список до / на каждом шаге итерации?

1 Ответ

1 голос
/ 31 января 2020

Использование обычного a_list[start:stop:step] интерфейса среза создает новый список и, следовательно, стоит O (n) памяти в размере среза.

itertools.islice(a_list, start, stop, step) выполняет итерацию по списку с использованием итератора и избегает использования памяти. Однако это не поддерживает отрицательные показатели. Внешний пакет more_itertools имеет функцию islice_extended, которая поддерживает отрицательные значения.

...