Как я могу перевернуть список в Python? - PullRequest
895 голосов
/ 15 октября 2010

Как я могу сделать следующее в Python?

array = [0, 10, 20, 40]
for (i = array.length() - 1; i >= 0; i--)

Мне нужны элементы массива, но от конца к началу.

Ответы [ 32 ]

1159 голосов
/ 15 октября 2010

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

>>> array=[0,10,20,40]
>>> for i in reversed(array):
...     print(i)

Обратите внимание, что reversed(...) не возвращает список. Вы можете получить обратный список, используя list(reversed(array)).

1158 голосов
/ 15 октября 2010
>>> L = [0,10,20,40]
>>> L[::-1]
[40, 20, 10, 0]

Расширенный синтаксис слайса хорошо объясняется в Python Что нового Запись для выпуска 2.3.5

По специальному запросу в комментарии это самый последний слайсдокументация .

337 голосов
/ 15 октября 2010
>>> L = [0,10,20,40]
>>> L.reverse()
>>> L
[40, 20, 10, 0]

или

>>> L[::-1]
[40, 20, 10, 0]
48 голосов
/ 09 марта 2015

Это дублирует список:

L = [0,10,20,40]
p = L[::-1]  #  Here p will be having reversed list

Это обратный список на месте:

L.reverse() # Here L will be reversed in-place (no new list made)
43 голосов
/ 21 сентября 2017

Я думаю, что лучший способ перевернуть список в Python - это сделать:

a = [1,2,3,4]
a = a[::-1]
print(a)
>>> [4,3,2,1]

Работа выполнена, и теперь у вас есть обратный список.

27 голосов
/ 20 ноября 2013

Для обращения к тому же списку используйте:

array.reverse()

Чтобы назначить перевернутый список для другого списка, используйте:

newArray = array[::-1] 
22 голосов
/ 25 февраля 2016

Использование нарезки, например, array = array [:: - 1], является изящным трюком и очень питонским, но, возможно, немного неясным для новичков.Использование метода reverse () - хороший способ перейти к повседневному кодированию, поскольку он легко читается.

Однако, если вам нужно повернуть список на месте, как в вопросе об интервью, вы, скорее всего, небыть в состоянии использовать встроенные методы, подобные этим.Интервьюер будет смотреть на то, как вы подходите к проблеме, а не на глубину знаний Python, требуется алгоритмический подход.Следующий пример, использующий классический своп, может быть одним из способов сделать это: -

def reverse_in_place(lst):      # Declare a function
    size = len(lst)             # Get the length of the sequence
    hiindex = size - 1
    its = size/2                # Number of iterations required
    for i in xrange(0, its):    # i is the low index pointer
        temp = lst[hiindex]     # Perform a classic swap
        lst[hiindex] = lst[i]
        lst[i] = temp
        hiindex -= 1            # Decrement the high index pointer
    print "Done!"

# Now test it!!
array = [2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]

print array                    # Print the original sequence
reverse_in_place(array)        # Call the function passing the list
print array                    # Print reversed list


**The result:**
[2, 5, 8, 9, 12, 19, 25, 27, 32, 60, 65, 1, 7, 24, 124, 654]
Done!
[654, 124, 24, 7, 1, 65, 60, 32, 27, 25, 19, 12, 9, 8, 5, 2]

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

17 голосов
/ 15 октября 2010
for x in array[::-1]:
    do stuff
17 голосов
/ 28 октября 2016

Я нахожу (вопреки некоторым другим предложениям), что 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
14 голосов
/ 14 ноября 2017

С reversed и list:

>>> list1 = [1,2,3]
>>> reversed_list = list(reversed(list1))
>>> reversed_list
>>> [3, 2, 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...