Рубрики
Без рубрики

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

Резюме: Есть только три лучших способа изменить порядок элементов списка: List.Reverse () —- Лучше всего, если вы хотите поменять элементы списка в Place.list [:: – 1] —- Лучше всего, если вы хотите написать краткий код, чтобы вернуть новый список с обращенными элементами. Проверьте (список) – – лучше всего, если вы хотите повторить все … Как изменить список в Python? Подробнее “

Автор оригинала: Chris.

Резюме : Существует только три лучших способа изменить порядок элементов списка:

  • list.reverse () – Лучше всего, если вы хотите Обратитесь в силу элементов списка на место Отказ
  • Список [:: - 1] – Лучше всего, если вы хотите написать Краткий код, чтобы вернуть новый список с обращенными элементами.
  • Перевернутый (список) – Лучше всего, если вы хотите Итерация по всем элементам списка в обращенном порядке без изменения исходного списка.

Метод list.reverse () Может быть на 37% быстрее, чем Перевернутый (список) Потому что новый объект не должен быть создан.

Когда я прочитал код от своих учеников, я часто понимаю, что знают один или два способа решения проблемы – но они не знают, какой путь является лучшим для конкретной проблемы. В этой статье вы узнаете, как поменять список – и который является самым питонным способом в заданной задаче. Итак, давайте погрузимся прямо в это!

Проблема : Учитывая список элементов. Как отменить порядок элементов в (квартире) списке.

Пример : Скажем, у вас есть следующий список:

['Alice', 'Bob', 'Carl', 'Dora']

Ваша цель – отменить элементы для получения следующего результата:

['Dora', 'Carl', 'Bob', 'Alice']

Есть несколько способов обратить вспять список. Вот быстрый обзор:

Упражнение : Запустите код. В этом случае вы бы использовали третий метод? Есть ли у него преимущество по сравнению с первым?

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

Метод 1: обратный список На месте со списком. VReverse ()

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

# Method 1: list.reverse()
names = ['Alice', 'Bob', 'Carl', 'Dora']
names.reverse()
print(names)
# ['Dora', 'Carl', 'Bob', 'Alice']

Порядок элементов исходного списка в переменной имена имеет обратное.

Метод 2: обратный список с нарезкой [:: – 1]

Нарезка – это концепция, чтобы вырезать подстроку из данной строки.

Используйте нотацию нарезки S [Старт: Стоп: Шаг] Для доступа к каждому шаг -ный элемент, начиная с индекса Начните (включая) и заканчивая индекс Стоп (Исключенный).

Все три аргумента являются необязательными, поэтому вы можете пропустить их для использования значений по умолчанию ( Start = 0 , Stop = Len (LST) , Шаг = 1 ). Например, выражение S [2: 4] из струны «Привет» выкрой ломтик «Я» и выражение S [: 3: 2] выкрой ломтик 'HL' Отказ

Вы можете использовать отрицательный размер шага (например, -1), чтобы нарезать справа налево в обратном порядке. Вот как вы можете использовать это, чтобы изменить список в Python:

# Method 2: Reverse a List with Slicing
names = ['Alice', 'Bob', 'Carl', 'Dora']
names = names[::-1]
print(names)
# ['Dora', 'Carl', 'Bob', 'Alice']

Этот метод является наиболее лаконичным и высокопроизводительным, потому что ломтик имеет эффективное представление памяти. Вот почему экспертные кодеры часто предпочитают Нарезка с отрицательным размером шага над list.reverse () метод.

Способ 3: обратный список с переплессом ITERATOR ITERATOR (список)

list.reverse () Способ переворачивает список на месте (это метод – и методы, как правило, изменяют объекты, на которые их называют). Но что, если вы хотите поместить список и вернуть новый объект списка? Хотя вы можете использовать нарезку для этого, еще лучший способ – использовать встроенный обратный (список) встроенной функции Python.

обратный () Функция имеет одно большое преимущество перед нарезкой: Он возвращает объект итератора, а не полный список. По сравнению с списком итератор имеет более удобное для памяти представление, и если вам не нужен список, это обычно лучше всего жить с итератором (например, итерацией по всем элементам в обратном порядке).

# Method 3: reversed()
names = ['Alice', 'Bob', 'Carl', 'Dora']
names = reversed(names)
print(list(names))
# ['Dora', 'Carl', 'Bob', 'Alice']

Однако в этом фрагменте кода вы на самом деле хотите список, поэтому вам нужно преобразовать итератор в список, используя Список (...) конструктор. В этом случае лучше использовать нарезку Имена [:: - 1] Как показано в предыдущем методе.

Способ 4: обратный список с индексацией и простым циклом

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

names = ['Alice', 'Bob', 'Carl', 'Dora']
l = []
for i in range(len(names)-1, -1, -1):
    l.append(names[i])
print(l)
# ['Dora', 'Carl', 'Bob', 'Alice']

Диапазон (Len (имена) -1, -1, -1) Функция Возвращает итератор, который начинается с индекса Лен (имена) -1 который является последним индексом в переменной имен . Он проходит весь путь до 0 (включено), используя отрицательный размер шага -1.

Способ 5: обратный список с отрицательной индексацией

Предыдущий фрагмент кода может быть оптимизирован (на мой взгляд), используя негативную индексацию. Каким-либо образом, хорошо, если вы знаете, как правильно использовать негативную индексацию в Python – это – для доступа к элементам справа, а не слева.

Элемент Алиса Боб Карьера Дора
Показатель 0 1 2 3
Отрицательный индекс -4 -3 -2 -1

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

# Method 5: Negative Indexing
names = ['Alice', 'Bob', 'Carl', 'Dora']
l = []
for i in range(1, len(names) + 1):
    l.append(names[-i])
print(l)
# ['Dora', 'Carl', 'Bob', 'Alice']

Обратите внимание, что последнее значение, сделанное переменной Я это I = 4. . Используется в качестве отрицательного индекса, вы получаете доступ к элементу имена [-4] последний.

Оценка эффективности

Давайте сравним скорость этих пяти методов!

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

Упражнение : Нажмите «Run» и посмотрите, какие методы выигрывают в вашем браузере! Сколько времени нужно, чтобы переоценить список 100 000 элементов?

Вы также можете скопировать и вставить код и запустить его на вашем компьютере:

def reverse1():
    names = ['Alice', 'Bob', 'Carl', 'Dora']
    names.reverse()

def reverse2():
    names = ['Alice', 'Bob', 'Carl', 'Dora']
    names = names[::-1]

def reverse3():
    names = ['Alice', 'Bob', 'Carl', 'Dora']
    names = reversed(names)

def reverse4():
    names = ['Alice', 'Bob', 'Carl', 'Dora']
    l = []
    for i in range(len(names)-1, -1, -1):
        l.append(names[i])

def reverse5():
    names = ['Alice', 'Bob', 'Carl', 'Dora']
    l = []
    for i in range(1, len(names) + 1):
        l.append(names[-i])

import timeit
print('M1: ', timeit.timeit(reverse1, number=10000), '--> list.reverse()')
print('M2: ', timeit.timeit(reverse2, number=10000), '--> slicing')
print('M3: ', timeit.timeit(reverse3, number=10000), '--> reversed()')
print('M4: ', timeit.timeit(reverse4, number=10000), '--> loop')
print('M5: ', timeit.timeit(reverse5, number=10000), '--> loop + negative index')

Наиболее исполнительным методом на моем компьютере является list.reverse () Метод:

M1:  0.0012140999999999957 --> list.reverse()
M2:  0.0016616999999999882 --> slicing
M3:  0.0019155999999999618 --> reversed()
M4:  0.005595399999999973 --> loop
M5:  0.006663499999999989 --> loop + negative index

Интересно увидеть, что наименее читаемые и наименее краткие методы 4 и 5 также самые медленные! Обратите внимание, что мы не преобразовали итератор, возвращаемый обратный () Способ для списка – иначе он добавил бы несколько миллисекунд к результату.

Хотя это не оценка научной эффективности, она указывает на то, что «стоящие на плечах гигантов», повторное повторное использование существующего кода, как правило, хорошая идея!

Заключение

Существует только три лучших способа изменить порядок элементов списка:

  • list.reverse () – Лучше всего, если вы хотите поместить элементы списка на месте.
  • Список [:: - 1] – Лучше всего, если вы хотите написать краткий код, чтобы вернуть новый список с обращенными элементами.
  • Перевернутый (список) — Лучше всего, если вы хотите повторить все элементы списка в обратном порядке, не изменив исходный список.

Вы видели в оценке, что метод list.reverse () Может быть на 37% быстрее, чем Перевернутый (список) Потому что новый объект не должен быть создан.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

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

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/how-to-reverse-a-list-in-python/”