Как я могу перевернуть список в Python?

UPDATE на студии Android AVD:

  1. открыть AVD-менеджер
  2. создать / отредактировать AVD
  3. нажать дополнительные настройки
  4. выберите предпочтительную настройку подключения

Нет микроволн или лифтов:)

901
задан Peter Mortensen 29 May 2018 в 22:22
поделиться

10 ответов

Использование некоторой логики

Использование некоторой старой школьной логики для практики для интервью.

Обмен номерами спереди назад. Используя два указателя index[0] and index[last]

def reverse(array):
    n = array
    first = 0
    last = len(array) - 1
    while first < last:
      holder = n[first]
      n[first] = n[last]
      n[last] = holder
      first += 1
      last -= 1
    return n

input -> [-1 ,1, 2, 3, 4, 5, 6]
output -> [6, 1, 2, 3, 4, 5, -1]
2
ответ дан Israel Manzo 29 May 2018 в 22:22
поделиться
def reverse(my_list):
  L = len(my_list)
  for i in range(L/2):
    my_list[i], my_list[L-i - 1] = my_list[L-i-1], my_list[i]
  return my_list
2
ответ дан David Guyon 29 May 2018 в 22:22
поделиться

Наиболее прямым переводом вашего требования на Python является следующее for утверждение:

for i in xrange(len(array) - 1, -1, -1):
   print i, array[i]

Это довольно загадочно, но может оказаться полезным.

2
ответ дан John Machin 29 May 2018 в 22:22
поделиться
def reverse(text):
    output = []
    for i in range(len(text)-1, -1, -1):
        output.append(text[i])
    return output
3
ответ дан Shawn Tsai 29 May 2018 в 22:22
поделиться

Я нахожу (вопреки некоторым другим предположениям), что l.reverse() - самый быстрый способ перевернуть длинный список в Python 3 и 2. Мне было бы интересно узнать, могут ли другие копировать эти моменты времени.

l[::-1], вероятно, медленнее, потому что он копирует список до его обращения. Добавление вызова list() вокруг итератора, сделанного из reversed(l), должно добавить некоторые издержки. Конечно, если вам нужна копия списка или итератор, используйте эти соответствующие методы, но если вы хотите просто перевернуть список, то l.reverse(), кажется, самый быстрый способ.

Функции

def rev_list1(l):
    return l[::-1]

def rev_list2(l):
    return list(reversed(l))

def rev_list3(l):
    l.reverse()
    return l

Список

l = list(range(1000000))

Время Python 3.5

timeit(lambda: rev_list1(l), number=1000)
# 6.48
timeit(lambda: rev_list2(l), number=1000)
# 7.13
timeit(lambda: rev_list3(l), number=1000)
# 0.44

Время Python 2.7

timeit(lambda: rev_list1(l), number=1000)
# 6.76
timeit(lambda: rev_list2(l), number=1000)
# 9.18
timeit(lambda: rev_list3(l), number=1000)
# 0.46
17
ответ дан Chris_Rands 29 May 2018 в 22:22
поделиться

Использование обратного (массива) будет, вероятно, лучшим маршрутом.

>>> array = [1,2,3,4]
>>> for item in reversed(array):
>>>     print item

Если вам нужно понять, как можно реализовать это, не используя встроенный reversed.

def reverse(a):
    midpoint = len(a)/2
    for item in a[:midpoint]:
        otherside = (len(a) - a.index(item)) - 1
        temp = a[otherside]
        a[otherside] = a[a.index(item)]
        a[a.index(item)] = temp
    return a

Это должно занять O (N) время.

7
ответ дан gpj 29 May 2018 в 22:22
поделиться

ОРГАНИЗАЦИОННЫЕ ЗНАЧЕНИЯ:

В Python порядок списков также можно манипулировать с помощью сортировки , упорядочивая переменные в числовом / алфавитном порядке:

Временно:

print(sorted(my_list))

Постоянный:

my_list.sort(), print(my_list)

Вы можете сортировать с флагом «reverse = True» :

print(sorted(my_list, reverse=True))

или

my_list.sort(reverse=True), print(my_list)

БЕЗ ОРГАНИЗАЦИИ

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

print(list(reversed(my_list)))

** Числа имеют приоритет над алфавитом в порядке листинга. Организация значений Python потрясающая.

5
ответ дан Peter Mortensen 29 May 2018 в 22:22
поделиться
>>> L = [0,10,20,40]
>>> L.reverse()
>>> L
[40, 20, 10, 0]

Или

>>> L[::-1]
[40, 20, 10, 0]
338
ответ дан ghostdog74 29 May 2018 в 22:22
поделиться

используйте

print(reversed(list_name))
1
ответ дан hmn Falahi 28 July 2019 в 16:31
поделиться
  • 1
    +1 для комментария смотрящий на внутренний код для руководства – Merlyn Morgan-Graham 13 November 2011 в 02:00
  • 2
    +1 для комментария смотрящий на внутренний код для руководства – Merlyn Morgan-Graham 13 November 2011 в 02:00

Другое решение состояло бы в том, чтобы использовать numpy.flip для этого

import numpy as np
array = [0, 10, 20, 40]
list(np.flip(array))
[40, 20, 10, 0]
0
ответ дан 19 December 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: