Как перевернуть список в Python (6 способов)

В этом руководстве вы научитесь использовать Python для переворота списка. Это часто встречаемая задача (и распространённый вопрос на собеседованиях по Python). Знание различных способов решения этой задачи поможет выбрать правильный метод в разных ситуациях.

Python имеет множество методов и функций, которые позволяют обратить список, используя его напрямую или итерацию по объекту списка. Вы узнаете, как обратить список в Python, используя функцию reversed(), метод .reverse(), индексацию списка, циклы for, генераторы списков и метод.

Пока изучение шести различных методов для реверса списка в Python может показаться излишним, одно из преимуществ Python — это гибкость, которую он предоставляет. Некоторые методы лучше подходят для вашего стиля, в то время как другие могут быть более производительными или легче для восприятия.

Оглавление

Резюме: Как перевернуть список в Python

В этом руководстве мы рассмотрим шесть различных способов разворачивания списка в Python. Однако сначала давайте обсудим, каков лучший и самый быстрый способ развернуть список в Python. Далее вы сможете ознакомиться с различными способами.

Наиболее питонический способ перевернуть список — это использовать метод списка .reverse(). Это потому, что он намеренный и не оставляет сомнений у читателя в том, чего вы хотите.

Самый быстрый способ развернуть список в Python — использовать либо цикл for, либо списковое включение. Чтобы проверить это, мы протестировали каждый метод на списке, содержащем 100,000,000 элементов! Это позволило нам действительно проверить каждый из различных методов.

Давайте посмотрим, каковы были результаты для каждого из методов:

Метод
Пришло время перевернуть список из 100 000 000 пунктов

.reverse() method

32.6 ms ± 3.35 ms на цикл

reversed() function

680 ms ± 21.6 ms на цикл

Reverse indexing

386 ms ± 3.14 ms на цикл

For loop

751 ns ± 1.83 ns на цикл

List comprehension

747 ns ± 1.12 ns на цикл

Slicer object

382 ms ± 2.35 ms на цикл

Теперь, когда мы это обсудили, давайте углубимся в то, как использовать эти разные методы для разворота списка в Python.

Понимание индексации списков Python

Прежде чем мы углубимся в то, как перевернуть список в Python, важно понять, как работают индексы в списках Python. Поскольку списки Python упорядочены и индексированы, мы можем получать и изменять элементы списка, основываясь на их индексе.

Индексы списков Python работают двумя основными способами:

  1. Положительный индекс: Индексация в списках Python начинается с 0 и продолжается до индекса, равного длине списка -1

  2. Отрицательная индексация: Элементы списков в Python можно индексировать в обратном порядке, начиная с позиции -1 и двигаясь до отрицательного значения длины списка.

На изображении ниже показано, как можно индексировать элементы списка.

В следующем разделе вы узнаете, как использовать метод Python list .reverse() для переворота списка в Python.

Перевернуть список Python с помощью обратного метода

У списков в Python есть метод .reverse(), который позволяет разворачивать список на месте. Это означает, что список переворачивается в память-эффективным способом без необходимости.

Давайте посмотрим, как можно развернуть наш список в Python с помощью метода .reverse()

# Перевернуть список Python с помощью reverse()
original_list = [1,2,3,4,5,6,7,8,9]
original_list.reverse()
print(original_list)

# Возвращает: [9, 8, 7, 6, 5, 4, 3, 2, 1]

Поскольку операция выполняется на месте, если вам нужно сохранить исходный список, сначала необходимо создать его копию. Мы можем создать копию списка, используя метод .copy() для исходного списка. Давайте рассмотрим, как это работает.

# Перевернуть список Python с помощью reverse()
original_list = [1,2,3,4,5,6,7,8,9]
reversed_list = original_list.copy()
reversed_list.reverse()

print('Оригинальный список: ', original_list)
print('Перевернутый список: ', reversed_list)

# Возвращает:
# Оригинальный список:  [1, 2, 3, 4, 5, 6, 7, 8, 9]
# Перевернутый список:  [9, 8, 7, 6, 5, 4, 3, 2, 1]

Мы видим, что, сначала применив метод .copy() к исходному списку, мы затем можем подключить метод .reverse(), чтобы перевернуть скопированный список.

В следующем разделе вы узнаете, как перевернуть список с помощью индексации списка.

Перевернуть список Python с помощью обратной функции

Python has a built-in function, reversed(), which takes an iterable object such as a list and returns the reversed version of it.

Метод reversed() работает аналогично методу индексации списка, описанному ниже. Он был добавлен в Python, чтобы реплицировать метод индексации, не будучи слишком многословным.

Давайте посмотрим, как мы можем использовать функцию reverse(), чтобы инвертировать список в Python:

# Перевернуть список Python с помощью reversed()
original_list = [1,2,3,4,5,6,7,8,9]
reversed_list = list(reversed(original_list))

print(reversed_list)

# Возвращает: [9, 8, 7, 6, 5, 4, 3, 2, 1]

Функция reversed() на самом деле возвращает объект итератора типа reverseiterator. Из-за этого нам нужно передать объект в функцию list(), чтобы преобразовать ее.

Мы можем проверить это, написав следующий код:

# Проверка типа reverseiterator
original_list = [1,2,3,4,5,6,7,8,9]
print(type(reversed(original_list)))

# Возвращает: <class 'list_reverseiterator'>

Передавая объект в функцию list(), все элементы извлекаются в список.

По своей сути объект итератора довольно эффективен в плане памяти. Это потому, что он ведет себя как объект-генератор и вычисляет лениво (только при доступе к элементу). Когда мы преобразуем его в список с помощью функции list(), мы теряем эту эффективность.

В следующем разделе вы узнаете, как использовать индексацию списков для обратного порядка элементов в список.

Перевернуть список Python с помощью индексации списков

При индексации списка люди обычно думают о доступе ко всем элементам между начальной и конечной позициями. Однако вы также можете включить переменную step, которая позволяет перемещаться по индексам с разными интервалами. Индексация списка принимает форму [start:stop:step].

Например, a_list[::1] вернет весь список с начала до конца. Если мы, вместо этого, используем шаг -1, то мы будем проходить список с последнего элемента к первому.

Перемещение по списку с конца к началу эквивалентно его развороту. Давайте посмотрим, как мы можем использовать индексацию списков в Python для его разворота:

# Перевернуть список Python с помощью индексации списка
original_list = [1,2,3,4,5,6,7,8,9]
reversed_list = original_list[::-1]
print(reversed_list)

# Возвращает: [9, 8, 7, 6, 5, 4, 3, 2, 1]

В коде выше мы создаем новый список, перебирая исходный список в обратном порядке. Этот метод не изменяет объект на месте и требует присвоения переменной.

Перевернуть список Python с помощью цикла For

Циклы for в Python — отличный способ повторить действие заданное количество раз. Мы можем использовать функцию reversed() и итерироваться по её элементам, чтобы создать список в обратном порядке.

Посмотрим, как это можно сделать:

# Перевернуть список Python с помощью цикла for
original_list = [1,2,3,4,5,6,7,8,9]
reversed_list = list()

for item in original_list:
    reversed_list = [item] + reversed_list

print(reversed_list)

# Возвращает: [9, 8, 7, 6, 5, 4, 3, 2, 1]

Давайте разберем, что делает приведенный выше блок кода:

  1. Мы определяем два списка: наш исходный список и пустой список для хранения перевернутых элементов.

  2. Затем мы перебираем каждый элемент в списке. Мы переназначаем перевернутый список на новый список, содержащий каждый элемент плюс перевернут

В следующем разделе вы узнаете, как использовать списковое включение в Python, чтобы перевернуть список.

Перевернуть список Python с помощью List Comprehension

Вместо использования цикла for, мы можем использовать генератор списков для переворота списка в Python. Вместо того, чтобы просто преобразовать цикл for в генератор списков, мы используем немного другой подход, чтобы достичь нашей цели.

Мы будем перебирать каждый элемент в нашем исходном списке в обратном порядке. Давайте посмотрим, как

# Перевернуть список Python с помощью List Comprehension
original_list = [1,2,3,4,5,6,7,8,9]
start = len(original_list) - 1
reversed_list = [original_list[i] for i in range(start, -1, -1)]
print(reversed_list)

# Возвращает: [9, 8, 7, 6, 5, 4, 3, 2, 1]

Давайте разберем, что делает приведенный выше код:

  1. Мы создаем переменную start, которая представляет длину списка минус один

  2. Затем мы создаем генератор списка, который обращается к каждому элементу индекса в нашем списке, используя диапазон от начальной позиции до 0 в обратном порядке.

Этот метод работает, но он не самый читабельный. Это может быть хорошим способом научиться этому для интервью, но в остальном это не самый рекомендуемый метод.

Перевернуть список Python с помощью метода Slice

Python также предоставляет функцию slice(), которая позволяет индексировать объект так же, как метод индексирования списка, описанный выше. Эта функция создает объект среза, что позволяет легко использовать один и тот же срез для нескольких объектов. Благодаря этому мы можем применять одно и то же индексирование к разным спискам.

Давайте посмотрим, как мы можем использовать функцию

# Перевернуть список Python с помощью slice()
original_list = [1,2,3,4,5,6,7,8,9]
reverser = slice(None, None, -1)
reversed_list = original_list[reverser]
print(reversed_list)

# Возвращает: [9, 8, 7, 6, 5, 4, 3, 2, 1]

Преимущество этого подхода в том, что мы можем назначить пользовательский срез, который можно легко использовать повторно, без необходимости изменять несколько элементов. Это позволяет вам легко применять один и тот же срез к нескольким элементам.

В дополнение к этому, функция slicer() позволяет вам дать срезу понятное имя. В примере выше мы назвали срез reverser, чтобы было понятно, что делает объект slice.

Часто задаваемые вопросы

Каков наилучший способ перевернуть список в Python?

Лучший и наиболее питонский способ перевернуть список в Python — использовать метод list.reverse(). Этот метод переворачивает список на месте и является самым понятным способом сообщить читателю, что вы делаете.

Как перевернуть список в Python с помощью срезов?

Лучший способ обратить список с помощью срезов в Python — использовать отрицательную индексацию. Это позволяет вам перешагнуть через список, используя -1, используя код list[::-1].

What is the fastest way to reverse a list in Python?

Самый быстрый способ перевернуть список в Python — использовать цикл for (или списочное включение). Этот метод в сотни раз быстрее других методов (даже при тестировании на списках из 100 000 000 элементов).

Заключение

В этом уроке вы научились разворачивать список на Python. Вы изучили, как работает индексирование списков и как это можно использовать для разворота списка. Затем вы узнали, как использовать методы reverse() и reversed() для разворота списка. Далее вы узнали, как использовать циклы for и списковые включения, а также функцию slice.

Дополнительные ресурсы

Чтобы узнать больше о смежных темах, ознакомьтесь с учебными пособиями ниже:

  • Python List sort(): подробное руководство по сортировке списков

  • Как выполнить итерацию (цикл) по списку в Python

  • Python: найти список индексов всех вхождений элемента

  • Python: перевернуть число (3 простых способа)

  • Чтобы узнать больше о списках в Python, ознакомьтесь с официальной документацией здесь.

Last updated