Метод list reverse() в Python
Функция не возвращает никакого значения. Он обновляет существующий список.
Пример 1: Перевернуть список
Есть и другие способы перевернуть список.
Пример 2: Инвертировать список
Пример 3: Доступ к элементам в обратном порядке
Если вам нужно получить доступ к отдельным элементам списка в обратном порядке, лучше использовать функцию reversed().

Автор статей. Изучаю Питон более 5 лет, помогаю новичкам разобраться с основами.
Автор: Кольцов Д · Published 19.04.2022
Автор: Кольцов Д · Published 20.12.2021
Автор: Кольцов Д · Published 19.04.2022
Блог Кольцова © 2022. При копировании указывайте ссылку на сайт. Контакты | Политика конфиденциальности
Лучший способ поменять местами элементы в списке?
размер списков может отличаться, но они всегда содержат четное число элементов.
Я довольно новичок в Python и в настоящее время делаю это так:
Я знаю, что это не реально весть и хотел бы использовать что-то более действенное. Может быть, список понимания?
12 ответов
нет необходимости в сложной логике, просто переставьте список с нарезкой и шагом:
редактировать объяснением
я считаю, что большинство зрителей уже знакомы с нарезкой списка и множественным назначением. В случае, если вы этого не сделаете, я постараюсь объяснить, что происходит (надеюсь, я не сделаю хуже).
чтобы понять список нарезки, здесь уже имеет отличную ответ и объяснение нотации среза списка. Проще говоря:
давайте посмотрим на требования OP:
первый уровень будет: l[::2] = [1, 3, 5, 7, 9] Второй уровень будет: l[1::2] = [2, 4, 6, 8, 10]
как мы хотим повторно назначить first = second & second = first , мы можем использовать несколько назначений, и обновить исходный список на месте:
в качестве примечания, чтобы получить новый список, но не изменяя оригинал l , мы можем назначить новый список из l , и выполните выше, то есть:
надеюсь, я не путаю никого из вас с этим дополнительным объяснением. Если это так, пожалуйста, помогите обновить мой и сделать его лучше: -)
вот один список понимания, что делает трюк:
ключом к пониманию этого является следующая демонстрация того, как он переставляет индексы списка:
на ^ — это эксклюзивный или оператора. Все это i^1 делает это перевернуть наименее значимый бит i , фактически меняя 0 с 1, 2 с 3 и так далее.
можно использовать попарно итерации и приковывая к разогнуть список:
или, вы можете использовать itertools.chain.from_iterable() чтобы избежать дополнительной распаковки:
эталон между топ-ответами:
Если вам интересно узнать о различных исполнениях между python 2 и 3, вот причины:
как вы можете видеть ответ @NPE ( inp1 ) выполняет очень лучше в python3.4, причина в том, что в python3.X range() является интеллектуальным объектом и не сохраняет все элементы между этим диапазоном в памяти, как список.
во многих отношениях объект, возвращенный range() ведет себя так, как будто это список, но на самом деле это не так. Это объект, который возвращает последовательные элементы желаемой последовательности при итерации по нему, но на самом деле не делает список, тем самым экономя пространство.
и именно поэтому в python 3 он не возвращает список во время среза объекта диапазона.
вторым существенным изменением является увеличение производительности третьего подхода ( inp3 ). Как вы можете видеть, что разница между ним и последним решением уменьшилась до
7sec). Причина в том, что zip() функция, которая в python3.X он возвращает итератор, который производит элементы по требованию. И с тех пор chain.from_iterable() необходимо повторить элементы еще раз, это совершенно избыточно, чтобы сделать это до этого (что это zip делает в python 2).
другой способ-создать вложенные списки с парами, изменяющими их порядок, а затем сгладить списки с помощью itertools.chain.from_iterable
EDIT: я только что применил эталонный тест Kasramvd к моему решению, и я обнаружил, что это решение медленнее, чем другие верхние ответы, поэтому я бы не рекомендовал его для больших списков. Я все еще нахожу это вполне читаемым, хотя если производительность не критична.
один из возможных ответов, используя chain и list comprehension
другой подход с просто повторным назначением и нарезкой техники
для удовольствия, если мы интерпретируем «своп» как «обратный» в более общей области, itertools.chain.from_iterable подход можно использовать для подпоследовательностей большей длины.
это предполагает, что исходный список имеет четное количество элементов. Если нет, то попробовать-кроме можно добавить:
Я не вижу ничего плохого в вашей реализации вообще. Но вместо этого вы могли бы сделать простой обмен.
редактировать По-видимому, у Python есть более приятный способ сделать своп, который сделает код таким
теперь найдите способ распаковать кортежи. Я не буду делать все домашнее задание.
Как поменять местами значения в списке python
Меняем элементы списка местами
Привет всем, до этого писал на Basic, где есть оператор SWAP меняющий два элемента местами. Тут по.
Сообщение было отмечено Dublonkart как решение
Поменять местами соседние элементы массива (1 и 2, 2 и 3, 3 и 4, и т.д.)
подскажите где косяк? var i,n,k:integer; a:arrayof integer; begin write(‘Массив: ‘); for.
Поменять местами соседние элементы массива b
поменять местами соседние элементы массива b,содержащего 10 элементов, т е 1-й со 2-м, 3-й с 4-м и.
Поменять соседние элементы местами из файла
Всем привет. Ребят, нужно поменять местами соседние элементы из файла местами. Код есть, вроде.