В Python есть замечательная функция, которую мы можем использовать для нарезки.я думаю, что этот подход проще, чем другой ответ, который использует itertools.groupby.
код:
l = [6, 6, 0, 5, 4, 5, 0, 0, 4, 6]
res = list(map(list, zip(l[::2], l[1::2])))
print(res)
результат:
[(6, 6), (0, 5), (4, 5), (0, 0), (4, 6)]
альтернатива с использованием понимания списка вместо встроенной функции карты:
res = [list(i) for i in (zip(l[::2], l[1::2]))]
объяснение:
Функция zip () принимает итераторы (например, list, string, dict) или определяемые пользователем итерации и возвращает итератор кортежей на основе итерируемого объекта.
the map () функция принимает два аргумента. Первый аргумент - это имя функции, а второй - последовательность (например, список) seq.
map () применяет функцию ко всем элементам последовательности.
мы используем ее здесь, чтобы применить встроенную функцию списка ко всем кортежам, полученным из функции zip.
с помощью нарезки мы даем zip-функции две итерации, сделанные из вашего списка, один начинается с первого элемента с шагом в два, а другой начинается со второго элемента, а также с шагом, равным двум.
объяснение среза, используемого здесь: l [:: 2]
Списки имеют бит по умолчанию функциональности при нарезке.Если перед первым двоеточием нет значения, это означает, что нужно начинать с начального индекса списка.Если после первого двоеточия нет значения, это означает, что необходимо пройти весь путь до конца списка.Это последнее двоеточие говорит Python, что мы хотели бы выбрать наш шаг увеличения.По умолчанию Python устанавливает это приращение равным 1, но это дополнительное двоеточие в конце чисел позволяет нам указать, что мы хотим, чтобы оно было.
учебник по нарезке:
ссылка
Документация по Python-функции:
ссылка
Документы по функциям карты Python:
ссылка
Документы для понимания списка Python:
ссылка