Python range в обратном порядке: Распечатайте список в обратном порядке с range()?

Содержание

Распечатайте список в обратном порядке с range()?

Как вы можете составить следующий список с range() в Python?

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

python

list

range

reverse

Поделиться

Источник


ramesh.mimit    

02 сентября 2011 в 16:12

19 ответов


  • Распечатайте односвязный список в обратном порядке, в постоянном пространстве и линейном времени

    Я слышал вопрос интервью: Распечатайте односвязный список в обратном порядке, в постоянном пространстве и линейном времени. Мое решение состояло в том, чтобы перевернуть linkedlist на месте, а затем распечатать его таким образом. Есть ли другое неразрушающее решение?

  • Python список разбит на куски (в обратном порядке)

    Я хочу разбить данный список python на куски, подобно следующей ссылке, но в обратном порядке. Как разбить список на куски одинакового размера в Python? В настоящее время forward_chunk([1,2,3],2) = [[1,2], [3]] Однако я хочу backward_chunk([1,2,3],2) = [[1], [2,3]] # what I currently have def…



625

используйте функцию reversed() :

reversed(range(10))

Это гораздо более значимо.

Обновление:

Если вы хотите, чтобы это был список (как указал btk):

list(reversed(range(10)))

Обновление:

Если вы хотите использовать только range для достижения того же результата, вы можете использовать все его параметры. range(start, stop, step)

Например, для создания списка [5,4,3,2,1,0] можно использовать следующее:

range(5, -1, -1)

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

Поделиться


Michał Šrajer    

02 сентября 2011 в 16:26



322

Используйте встроенную функцию ‘range’. Подпись- range(start, stop, step) . Это создает последовательность, которая дает числа , начинающиеся с start и заканчивающиеся, если было достигнуто stop , исключая stop .

>>> range(9,-1,-1)   
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> range(-2, 6, 2)
    [-2, 0, 2, 4]

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

Поделиться


Unknown    

02 сентября 2011 в 16:17



48

Вы можете использовать range(10)[::-1] , что то же самое, что и range(9, -1, -1) , и, возможно, более читабельно (если вы знакомы с распространенной идиомой sequence[::-1] Python).

Поделиться


martineau    

11 февраля 2014 в 22:44


  • Python как напечатать список списков в обратном порядке?

    Как я могу распечатать список списков в обратном порядке в Python 3.x? Я создал список смежности, написав список списков следующим образом: adjazenzListe = [[1], #0 [1, 3], #1 [1], #2 [4, 5],#3 [3], #4 [3, 6, 7],#5 [5], #6 [8, 10],#7 [9, 10], #8 [8], #9 [7, 8, 11],#10 [10, 12, 13], #11 [11], #12…

  • список в обратном порядке python

    Как я должен исправить этот код, чтобы получить список, который находится в обратном порядке последовательности s? def reverse(s): Return a list that is the reverse of sequence s. >>> reverse([1,2,3]) [3, 2, 1] rs = [] for element in s: rs = s + rs return rs



31

Для тех, кого интересует «efficiency» из вариантов, собранных до сих пор…

Ответ Джейме RGP заставил меня перезагрузить компьютер после того , как я выбрал решение Джейсона «challenging», буквально следуя моему собственному предложению (через комментарий). Чтобы избавить любопытных из вас от простоя, я представляю здесь свои результаты (худшие-первые):

Ответ Джейсона (возможно, просто экскурс в силу понимания списка ):

$ python -m timeit "[9-i for i in range(10)]"
1000000 loops, best of 3: 1.54 usec per loop

ответ Мартино (читаемый, если вы знакомы с синтаксисом расширенных срезов ):

$ python -m timeit "range(10)[::-1]"
1000000 loops, best of 3: 0.743 usec per loop

Ответ Михаила Шрайера (принятый, очень читаемый):

$ python -m timeit "reversed(range(10))"
1000000 loops, best of 3: 0.538 usec per loop

ответ бене (самый первый, но очень отрывочный в то время ):

$ python -m timeit "range(9,-1,-1)"
1000000 loops, best of 3: 0.401 usec per loop

Последний вариант легко запомнить, используя обозначение range(n-1,-1,-1) Вэла Никмана .

Поделиться


Wolf    

13 июня 2017 в 11:02



13

for i in range(8, 0, -1)

решит эту проблему. Он выведет 8 к 1, а -1 означает перевернутый список

Поделиться


Jutta    

11 марта 2016 в 09:17



9

Помимо читаемости, reversed(range(n)) , кажется, быстрее, чем range(n)[::-1] .

$ python -m timeit "reversed(range(1000000000))"
1000000 loops, best of 3: 0.598 usec per loop
$ python -m timeit "range(1000000000)[::-1]"
1000000 loops, best of 3: 0.945 usec per loop

Просто если кому-то интересно 🙂

Поделиться


Jaime RGP    

16 октября 2015 в 15:55



9

Когда у вас есть итерация по n элементам и вы хотите заменить порядок списка , возвращаемого range(start, stop, step) , вы должны использовать третий параметр диапазона, который идентифицирует step , и установить его на -1, другие параметры должны быть соответствующим образом скорректированы:

  1. Укажите параметр stop как -1 (предыдущее значение stop - 1 , stop было равно 0 ).
  2. В качестве начального параметра используйте n-1 .

Таким образом, эквивалент диапазона(n) в обратном порядке будет:

n = 10
print range(n-1,-1,-1) 
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Поделиться


Andriy Ivaneyko    

13 марта 2016 в 23:59



6

Требование в этом вопросе требует list целых чисел размером 10 в
порядке убывания. Итак, давайте составим список в python.

# This meets the requirement.
# But it is a bit harder to wrap one's head around this. right?
>>> range(10-1, -1, -1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# let's find something that is a bit more self-explanatory. Sounds good?
# ----------------------------------------------------

# This returns a list in ascending order.
# Opposite of what the requirement called for.
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# This returns an iterator in descending order.
# Doesn't meet the requirement as it is not a list.
>>> reversed(range(10))
<listreverseiterator object at 0x10e14e090>

# This returns a list in descending order and meets the requirement
>>> list(reversed(range(10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Поделиться


un33k    

21 сентября 2014 в 17:14



6

Вы можете печатать обратные числа с помощью range() BIF, например ,

for number in range ( 10 , 0 , -1 ) :
    print ( number ) 

Выход будет
[10,9,8,7,6,5,4,3,2,1]

range() — диапазон ( начало , конец , приращение/уменьшение )
где начало является включающим , конец является исключающим, а приращение может быть любым числом и ведет себя как шаг

Поделиться


Mr. Suryaa Jha    

20 мая 2017 в 19:03



5

Очень часто задается вопрос, лучше ли range(9, -1, -1) , чем reversed(range(10)) в Python 3? Люди, которые работали с итераторами на других языках, сразу же склонны думать, что reversed() должен кэшировать все значения, а затем возвращаться в обратном порядке. Дело в том, что оператор Python reversed() не работает, если объект является просто итератором. Объект должен иметь один из следующих двух для работы reversed():

  1. Либо поддерживайте len() и целочисленные индексы через []
  2. Или реализован метод __reversed__() .

Если вы попытаетесь использовать reversed() на объекте, который не имеет ничего из вышеперечисленного, вы получите:

>>> [reversed((x for x in range(10)))]
TypeError: 'generator' object is not reversible

Короче говоря, Python reversed() предназначен только для объектов, подобных массиву, и поэтому он должен иметь ту же производительность, что и прямая итерация.

Но как насчет range() ? Разве это не генератор? В Python 3 это генератор, но завернутый в класс, который реализует оба вышеперечисленных. Таким образом, range(100000) не занимает много памяти, но по-прежнему поддерживает эффективную индексацию и реверсирование.

Таким образом, в целом, вы можете использовать reversed(range(10)) без какого-либо влияния на производительность.

Поделиться


Shital Shah    

10 января 2019 в 00:10



4

range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Поделиться


Asinox    

18 февраля 2013 в 07:00



3

я верю, что это может помочь,

range(5)[::-1]

ниже приведено использование:

for i in range(5)[::-1]:
    print i 

Поделиться


dineshsprabu    

22 августа 2015 в 04:32



3

Использование без [::-1] или наоборот —

def reverse(text):
    result = []
    for index in range(len(text)-1,-1,-1):
        c = text[index]
        result.append(c)
    return ''.join(result)

print reverse("python!")

Поделиться


rhel.user    

22 июля 2015 в 11:41



2

Я подумал, что многие (как и я) могли бы быть более заинтересованы в распространенном случае обхода существующего списка в обратном порядке , как указано в названии, а не просто в создании индексов для такого обхода.

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

TL;DR a[::-1] -самый быстрый.

NB: Если вы хотите получить более подробный анализ различных альтернатив разворота и их эффективности, ознакомьтесь с этим замечательным ответом .

Предпосылки:

a = list(range(10))

Ответ Джейсона :

%timeit [a[9-i] for i in range(10)]
1.27 µs ± 61.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

ответ Мартино :

%timeit a[::-1]
135 ns ± 4.07 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

Ответ Михаила Шрайера :

%timeit list(reversed(a))
374 ns ± 9.87 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

ответ бене :

%timeit [a[i] for i in range(9, -1, -1)]
1.09 µs ± 11.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

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

NB: Я тестировал в JupyterLab, который имеет удобный «magic command» %timeit . Он использует стандарт timeit.timeit под капотом. Проверено на Python 3.7.3

Поделиться


pkuderov    

08 мая 2020 в 18:38



1

[9-i for i in range(10)]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Поделиться


Jason    

12 августа 2015 в 04:29



1

Вам не обязательно использовать функцию диапазона, вы можете просто сделать list[::-1], которая должна быстро возвращать список в обратном порядке, без каких-либо дополнений.

Поделиться


user7420740    

15 января 2017 в 07:06



1

Предположим, у вас есть список, назовите его
a={1,2,3,4,5}
Теперь, если вы хотите распечатать список в обратном порядке, просто используйте следующий код.

a.reverse
for i in a:
   print(i)

Я знаю, что вы спросили, используя диапазон, но он уже ответил.

Поделиться


Vishal Kumar    

13 июля 2017 в 12:03



0

range(9,-1,-1)
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Это правильная форма. Если вы используете

reversed(range(10))

вы не получите 0 случаев. Например, предположим, что ваша цифра 10 не является магическим числом, а переменная, которую вы используете для поиска, начинается с обратного. Если ваш случай n равен 0, обратный(диапазон(0)) не будет выполняться, что неверно, если у вас случайно есть один объект в нулевом индексе.

Поделиться


user3807372    

05 июля 2014 в 09:07



0

поскольку range(n) производит итерацию, есть все виды приятных вещей, которые вы можете сделать, которые приведут к желаемому результату, например:

range(n)[::-1]

если циклы в порядке, мы можем сделать что-то вроде очереди:

a = []
for i in range(n):
    a.insert(0,a)
return a

или, может быть, использовать метод reverse() на нем:

reverse(range(n))

Поделиться


Nadavo    

02 сентября 2020 в 18:17


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

Печать односвязного списка в обратном порядке

Ладно, это был бонусный вопрос в тесте CMPS 280 в университете Юго-Восточной Луизианы. Распечатайте односвязный список в обратном порядке в три строки. Есть идеи?

Отсортируйте список по алфавиту в порядке убывания и распечатайте его

A. сохраните 5 имен в списке. Позвольте пользователю ввести каждое имя. B. отсортируйте список в алфавитном порядке по возрастанию и распечатайте его. c. отсортируйте список по алфавиту в порядке…

Рекурсивный метод, который печатает связанный список в обратном порядке

У меня возникли проблемы с написанием метода, который должен принимать ссылку на общий односвязный список, и созданием тестовой программы для тестирования моего метода на списке строк (Распечатайте…

Распечатайте односвязный список в обратном порядке, в постоянном пространстве и линейном времени

Я слышал вопрос интервью: Распечатайте односвязный список в обратном порядке, в постоянном пространстве и линейном времени. Мое решение состояло в том, чтобы перевернуть linkedlist на месте, а затем…

Python список разбит на куски (в обратном порядке)

Я хочу разбить данный список python на куски, подобно следующей ссылке, но в обратном порядке. Как разбить список на куски одинакового размера в Python? В настоящее время forward_chunk([1,2,3],2) =…

Python как напечатать список списков в обратном порядке?

Как я могу распечатать список списков в обратном порядке в Python 3.x? Я создал список смежности, написав список списков следующим образом: adjazenzListe = [[1], #0 [1, 3], #1 [1], #2 [4, 5],#3 [3],…

список в обратном порядке python

Как я должен исправить этот код, чтобы получить список, который находится в обратном порядке последовательности s? def reverse(s): Return a list that is the reverse of sequence s. >>>…

Распечатайте список в обратном порядке

У меня есть код, который я хочу напечатать в обратном порядке, но он не сработал. Он печатает [2 , 4 , 6 , 8 , 10, 10] def printBackwards (list) : i = len(list) while (i > 0):…

Запуск цикла Ansible в обратном порядке

Я работаю над книгой пьес ansible, и в одной пьесе я пытаюсь удалить некоторые узлы, используя свой собственный модуль (NodeModule), используя UUID. Все узлы — это список, содержащий UUID узла. -…

Python ошибка: словарь повторяется в обратном порядке в Leetcode

Я попытался решить задачу 1313. Распакуйте кодированный список длины выполнения на Leetcode, мой код отлично работает на моем IDE, однако когда я отправляю его на Leetcode, иногда словарь…

Пройдите по списку в обратном порядке в Python

Так что я могу начать с len(collection) и закончить в collection[0] .

Я также хочу иметь доступ к индексу цикла.

python

loops

reverse

Поделиться

Источник


Joan Venge    

09 февраля 2009 в 19:04

25 ответов


  • Можно ли сделать a для каждого цикла в java в обратном порядке?

    Мне нужно пробежаться по списку в обратном порядке, используя Java. Итак, где это делает его вперед: for(String string: stringList){ //…do something } Есть ли какой-то способ повторить stringList в обратном порядке, используя синтаксис for each ? Для ясности: я знаю, как перебирать список в…

  • Печать списка в обратном порядке не работает-Python 3x

    Я пишу программу, которая постоянно просит пользователя вводить имена до тех пор, пока не будет введено слово END, после чего она распечатывает список имен в обратном порядке . Сначала я не знал, как распечатать список в обратном порядке, поэтому нашел следующее: пройдите список в обратном порядке…



1335

Используйте встроенную функцию reversed():

>>> a = ["foo", "bar", "baz"]
>>> for i in reversed(a):
...     print(i)
... 
baz
bar
foo

Чтобы также получить доступ к исходному индексу, используйте enumerate() в списке, прежде чем передавать его в reversed() :

>>> for i, e in reversed(list(enumerate(a))):
...     print(i, e)
... 
2 baz
1 bar
0 foo

Поскольку enumerate() возвращает генератор, а генераторы не могут быть отменены, сначала вам нужно преобразовать его в list .

Поделиться


Greg Hewgill    

09 февраля 2009 в 19:05



190

Вы можете сделать:

for item in my_list[::-1]:
    print item

(Или все, что вы хотите сделать в for loop.)

Срез [::-1] отменяет список в for loop (но на самом деле не изменит ваш список «permanently»).

Поделиться


mipadi    

09 февраля 2009 в 19:07



70

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

def reverse_enum(L):
   for index in reversed(xrange(len(L))):
      yield index, L[index]

L = ['foo', 'bar', 'bas']
for index, item in reverse_enum(L):
   print index, item

Поделиться


Triptych    

09 февраля 2009 в 19:14


  • Python как отсортировать словарь по значению в обратном порядке

    Я хочу отсортировать словарь по значению в обратном порядке. Например: [красный: 2, синий: 45, зеленый: 100] для печати зеленый 100, синий 45, красный 2 Спасибо

  • Найдите ближайший datetime к желаемому datetime и пройдите по списку в обратном порядке

    У меня есть список данных, которые я извлек и упорядочил от предыдущих до более поздних datetime. Я пытаюсь сделать цикл назад в этом списке на основе времени и даты, которые я указываю, однако дата и время в списке не обязательно будут равны datetime, которые я указываю, поэтому я хочу, чтобы он…



69

Это можно сделать так:

for i in range(len(collection)-1, -1, -1):
    print collection[i]

    # print(collection[i]) for python 3. +

Таким образом , ваша догадка была довольно близка к :), немного неловко, но в основном она говорит: начните с 1 меньше, чем len(collection), продолжайте, пока не дойдете до -1, шагами -1.

К вашему сведению, функция help очень полезна, поскольку она позволяет просматривать документы для чего-либо из консоли Python, например:

help(range)

Поделиться


Alan Rowarth    

09 февраля 2009 в 23:18



23

Встроенная функция reversed удобна:

for item in reversed(sequence):

В документации для reversed объясняются его ограничения.

В тех случаях, когда мне нужно пройти последовательность в обратном порядке вместе с индексом (например, для изменений на месте, изменяющих длину последовательности), у меня есть эта функция, определенная в модуле my codeutil:

import itertools
def reversed_enumerate(sequence):
    return itertools.izip(
        reversed(xrange(len(sequence))),
        reversed(sequence),
    )

Это позволяет избежать создания копии последовательности. Очевидно, что ограничения reversed все еще применяются.

Поделиться


tzot    

11 октября 2011 в 06:28



12

Подход без импорта:

for i in range(1,len(arr)+1):
    print(arr[-i])

или

for i in arr[::-1]:
    print(i)

Поделиться


Kenan    

06 декабря 2016 в 15:37



10

Как насчет того, чтобы не создавать новый список, вы можете сделать это путем индексации:

>>> foo = ['1a','2b','3c','4d']
>>> for i in range(len(foo)):
...     print foo[-(i+1)]
...
4d
3c
2b
1a
>>>

OR

>>> length = len(foo)
>>> for i in range(length):
...     print foo[length-i-1]
...
4d
3c
2b
1a
>>>

Поделиться


James    

15 февраля 2014 в 05:04



10

Кроме того, вы можете использовать функции «range» или «count».
Следующим образом:

a = ["foo", "bar", "baz"]
for i in range(len(a)-1, -1, -1):
    print(i, a[i])

3 baz
2 bar
1 foo

Вы также можете использовать «count» из itertools следующим образом:

a = ["foo", "bar", "baz"]
from itertools import count, takewhile

def larger_than_0(x):
    return x > 0

for x in takewhile(larger_than_0, count(3, -1)):
    print(x, a[x-1])

3 baz
2 bar
1 foo

Поделиться


disooqi    

06 апреля 2018 в 13:27



9

>>> l = ["a","b","c","d"]
>>> l.reverse()
>>> l
['d', 'c', 'b', 'a']

OR

>>> print l[::-1]
['d', 'c', 'b', 'a']

Поделиться


Freddy    

11 сентября 2015 в 06:51



7

Мне нравится подход с одним генератором:

((i, sequence[i]) for i in reversed(xrange(len(sequence))))

Поделиться


lkraider    

17 августа 2014 в 18:50



4

Выразительный способ достижения reverse(enumerate(collection)) в python 3:

zip(reversed(range(len(collection))), reversed(collection))

в python 2:

izip(reversed(xrange(len(collection))), reversed(collection))

Я не уверен, почему у нас нет стенографии для этого, например.:

def reversed_enumerate(collection):
    return zip(reversed(range(len(collection))), reversed(collection))

или почему у нас нет reversed_range()

Поделиться


Barney Szabolcs    

14 июля 2018 в 14:58


Поделиться


Bill Konrad    

09 февраля 2009 в 19:07



3

def reverse(spam):
    k = []
    for i in spam:
        k.insert(0,i)
    return "".join(k)

Поделиться


Jase    

25 апреля 2014 в 01:02



3

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

a = [1, 2, 3, 4, 5, 6, 7]
for x in xrange(len(a)):
    x += 1
    print a[-x]

Поделиться


emorphus    

27 февраля 2017 в 17:18



2

здесь пригодится обратная функция:

myArray = [1,2,3,4]
myArray.reverse()
for x in myArray:
    print x

Поделиться


bchhun    

09 февраля 2009 в 19:07



2

Если вам нужен индекс, а ваш список невелик, самый читаемый способ-сделать reversed(list(enumerate(your_list))) , как говорится в принятом ответе. Но это создает копию вашего списка, поэтому, если ваш список занимает большую часть вашей памяти, вам придется вычесть индекс, возвращаемый enumerate(reversed()) из len()-1 .

Если вам просто нужно сделать это один раз:

a = ['b', 'd', 'c', 'a']

for index, value in enumerate(reversed(a)):
    index = len(a)-1 - index

    do_something(index, value)

или если вам нужно сделать это несколько раз, вы должны использовать генератор:

def enumerate_reversed(lyst):
    for index, value in enumerate(reversed(lyst)):
        index = len(lyst)-1 - index
        yield index, value

for index, value in enumerate_reversed(a):
    do_something(index, value)

Поделиться


Boris    

06 сентября 2018 в 01:44



1

Вы также можете использовать цикл while :

i = len(collection)-1
while i>=0:
    value = collection[i]
    index = i
    i-=1

Поделиться


Yuval A.    

27 июля 2016 в 12:57



1

Вы можете использовать отрицательный индекс в обычном for loop:

>>> collection = ["ham", "spam", "eggs", "baked beans"]
>>> for i in range(1, len(collection) + 1):
...     print(collection[-i])
... 
baked beans
eggs
spam
ham

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

>>> for i in range(1, len(collection) + 1):
...     print(i-1, collection[-i])
... 
0 baked beans
1 eggs
2 spam
3 ham

Чтобы получить доступ к исходному, не реверсированному индексу, используйте len(collection) - i :

>>> for i in range(1, len(collection) + 1):
...     print(len(collection)-i, collection[-i])
... 
3 baked beans
2 eggs
1 spam
0 ham

Поделиться


Malcolm    

26 ноября 2017 в 03:15



1

Если вы не возражаете, чтобы индекс был отрицательным, вы можете сделать:

>>> a = ["foo", "bar", "baz"]
>>> for i in range(len(a)):
...     print(~i, a[~i]))
-1 baz
-2 bar
-3 foo

Поделиться


jss367    

21 февраля 2019 в 22:10



1

Я думаю, что самый элегантный способ-это преобразовать enumerate и reversed с помощью следующего генератора

(-(ri+1), val) for ri, val in enumerate(reversed(foo))

который генерирует обратную сторону итератора enumerate

Пример:

foo = [1,2,3]
bar = [3,6,9]
[
    bar[i] - val
    for i, val in ((-(ri+1), val) for ri, val in enumerate(reversed(foo)))
]

Результат:

[6, 4, 2]

Поделиться


CervEd    

03 июня 2019 в 09:53



0

Другие ответы хороши, но если вы хотите сделать как
стиль понимания списка

collection = ['a','b','c']
[item for item in reversed( collection ) ]

Поделиться


fedmich    

27 июля 2013 в 15:17



0

Чтобы использовать отрицательные индексы: начните с -1 и отступайте на -1 на каждой итерации.

>>> a = ["foo", "bar", "baz"]
>>> for i in range(-1, -1*(len(a)+1), -1):
...     print i, a[i]
... 
-1 baz
-2 bar
-3 foo

Поделиться


stroz    

01 июня 2016 в 17:04



0

input_list = ['foo','bar','baz']
for i in range(-1,-len(input_list)-1,-1)
    print(input_list[i])

я думаю, что это также простой способ сделать это… читать с конца и продолжать уменьшаться до длины списка, так как мы никогда не выполняем индекс «end», поэтому также добавили -1

Поделиться


Varun Maurya    

22 июля 2018 в 07:09



0

Простой способ :

n = int(input())
arr = list(map(int, input().split()))

for i in reversed(range(0, n)):
    print("%d %d" %(i, arr[i]))

Поделиться


rashedcs    

26 декабря 2017 в 07:40



0

Предполагая, что задача состоит в том, чтобы найти последний элемент, удовлетворяющий некоторому условию в списке (т. Е. Первый при взгляде назад), я получаю следующие числа:

>>> min(timeit.repeat('for i in xrange(len(xs)-1,-1,-1):\n    if 128 == xs[i]: break', setup='xs, n = range(256), 0', repeat=8))
4.6937971115112305
>>> min(timeit.repeat('for i in reversed(xrange(0, len(xs))):\n    if 128 == xs[i]: break', setup='xs, n = range(256), 0', repeat=8))
4.809093952178955
>>> min(timeit.repeat('for i, x in enumerate(reversed(xs), 1):\n    if 128 == x: break', setup='xs, n = range(256), 0', repeat=8))
4.931743860244751
>>> min(timeit.repeat('for i, x in enumerate(xs[::-1]):\n    if 128 == x: break', setup='xs, n = range(256), 0', repeat=8))
5.548468112945557
>>> min(timeit.repeat('for i in xrange(len(xs), 0, -1):\n    if 128 == xs[i - 1]: break', setup='xs, n = range(256), 0', repeat=8))
6.286104917526245
>>> min(timeit.repeat('i = len(xs)\nwhile 0 < i:\n    i -= 1\n    if 128 == xs[i]: break', setup='xs, n = range(256), 0', repeat=8))
8.384078979492188

Итак, самый уродливый вариант xrange(len(xs)-1,-1,-1) -самый быстрый.

Поделиться


wonder.mice    

10 сентября 2018 в 23:02


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

Python словарь, хранящий его в обратном порядке

Когда я храню словарь как показано ниже я получаю переменную словаря в обратном порядке когда я храню дисковую переменную как nm={‘key1’: ‘v1’, ‘key2’: ‘v2’, ‘key3’: ‘v3’} Нм читает меня как бы в…

Нарезка Python в обратном порядке

В Python я знаю, что вы можете нарезать последовательности как seq[from:to+1:step]. Но если вы срезаете в обратном порядке, используя шаг -1, почему он не показывает элемент from? Это смещает один…

Как перевернуть кортежи в Python?

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

Можно ли сделать a для каждого цикла в java в обратном порядке?

Мне нужно пробежаться по списку в обратном порядке, используя Java. Итак, где это делает его вперед: for(String string: stringList){ //…do something } Есть ли какой-то способ повторить stringList…

Печать списка в обратном порядке не работает-Python 3x

Я пишу программу, которая постоянно просит пользователя вводить имена до тех пор, пока не будет введено слово END, после чего она распечатывает список имен в обратном порядке . Сначала я не знал,…

Python как отсортировать словарь по значению в обратном порядке

Я хочу отсортировать словарь по значению в обратном порядке. Например: [красный: 2, синий: 45, зеленый: 100] для печати зеленый 100, синий 45, красный 2 Спасибо

Найдите ближайший datetime к желаемому datetime и пройдите по списку в обратном порядке

У меня есть список данных, которые я извлек и упорядочил от предыдущих до более поздних datetime. Я пытаюсь сделать цикл назад в этом списке на основе времени и даты, которые я указываю, однако дата…

Печать диктанта в обратном порядке python

Итак, у меня есть диктант чисел и строк, вот так: d = {Hi: None, 2110: 1110, 1110: None} И я хочу напечатать его справа налево. Подобный этому: {1110: None, 2110: 1110, Hi: None} Как бы я это…

Как запустить операторы в обратном порядке c#

У меня есть метод c#, который запускает определенные блоки кода в определенном порядке. Я хочу передать логический параметр: IsRunningInReverse, который изменит порядок запуска блоков кода? Я мог бы…

Jackson десериализует объект из JSON в обратном порядке

Jackson — это десериализация элементов JSON в обратном порядке того, что я получаю. У нас есть среда, где у нас есть интерфейс, который посылает что-то вроде следующего JSON: { nameElement: element,…

Перемещение списка в обратном порядке в Python Ru Python

Поэтому я могу начать с len(collection) и заканчивать в collection[0] .

EDIT: Извините, я забыл упомянуть, что я также хочу иметь доступ к индексу цикла.

Используйте встроенную функцию reversed() :

 >>> a = ["foo", "bar", "baz"] >>> for i in reversed(a): ... print i ... baz bar foo 

Для доступа к исходному индексу:

 >>> for i, e in reversed(list(enumerate(a))): ... print i, e ... 2 baz 1 bar 0 foo 

Ты можешь сделать:

 for item in my_list[::-1]: print item 

(Или то, что вы хотите сделать в цикле for.)

Слой [::-1] меняет список в цикле for (но фактически не будет изменять ваш список «навсегда»).

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

 def reverse_enum(L): for index in reversed(xrange(len(L))): yield index, L[index] L = ['foo', 'bar', 'bas'] for index, item in reverse_enum(L): print index, item 

Это можно сделать так:

  для i в диапазоне (len (collection) -1, -1, -1):
     печать коллекция [i]

Итак, ваше предположение было довольно близко 🙂 Немного неудобно, но в основном это говорит: начинайте с 1 меньше, чем len(collection) , продолжайте движение, пока вы не достигнете до -1, с шагом -1.

Fyi, help функция очень полезна, так как позволяет вам просматривать документы для чего-то из консоли Python, например:

help(range)

reversed встроенная функция удобна:

 for item in reversed(sequence): 

В документации для обратного объяснения его ограничений.

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

 import itertools def reversed_enumerate(sequence): return itertools.izip( reversed(xrange(len(sequence))), reversed(sequence), ) 

Это позволяет избежать создания копии последовательности. Очевидно, что reversed ограничения по-прежнему применяются.

Мне нравится подход с однострочным генератором:

 ((i, sequence[i]) for i in reversed(xrange(len(sequence)))) 
 >>> l = ["a","b","c","d"] >>> l.reverse() >>> l ['d', 'c', 'b', 'a'] 

ИЛИ

 >>> print l[::-1] ['d', 'c', 'b', 'a'] 

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

 >>> foo = ['1a','2b','3c','4d'] >>> for i in range(len(foo)): ... print foo[-(i+1)] ... 4d 3c 2b 1a >>> 

ИЛИ

 >>> length = len(foo) >>> for i in range(length): ... print foo[length-i-1] ... 4d 3c 2b 1a >>> 

Другие ответы хороши, но если вы хотите сделать стиль List List

 collection = ['a','b','c'] [item for item in reversed( collection ) ] 
 def reverse(spam): k = [] for i in spam: k.insert(0,i) return "".join(k) 

здесь полезно использовать обратную функцию:

 myArray = [1,2,3,4] myArray.reverse() for x in myArray: print x 

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

более подробная ссылка ссылки

Использовать отрицательные индексы: начинать с -1 и отступать на -1 на каждой итерации.

 >>> a = ["foo", "bar", "baz"] >>> for i in range(-1, -1*(len(a)+1), -1): ... print i, a[i] ... -1 baz -2 bar -3 foo 

Вы также можете использовать цикл while:

 i = len(collection)-1 while i>=0: value = collection[i] index = i i-=1 
 def reverse_enumerate(iterable): yield from zip(reversed(range(len(iterable))), reversed(iterable)) 

Легкий подход:

 for i in range(1,len(arr)+1): print(arr[-i]) 

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

 a = [1, 2, 3, 4, 5, 6, 7] for x in xrange(len(a)): x += 1 print a[-x] 

Красивый Питон. Правильные циклы в Python.

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

Синтаксис Питона достаточно простой, однако когда вы начинаете программировать, то вероятно замечаете, что красота и минималистичность местами куда-то исчезает. Вероятно, это связано с тем, что Python-код позволяет использовать множество идиом — специфичных конструкций кода, не присущих другим языкам.

Как не надо писать циклы FOR на Python?

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

Цикл по диапазону значений в Python

Одним из самых распространенных является цикл перебора некоторого диапазона значений. Что-то типа от 0 до 1000, от 1 до 99 — в общем, какие угодно диапазоны. Хороший способ использовать циклы в Python показан ниже.

#Вот так делать не надо!
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    #бла-бла
#А вот так надо. Это же классно!
for i in range(11):
    #бла-бла

В примере используется функция range(). В нее надо передавать значение, до которого будет идти перебор. При этом само значение включено не будет. В функцию можно передавать начало, конец и даже шаг перебора в качестве аргументов.

Цикл с использованием индексов и значений в Python

Еще одним частым применением циклов является цикл по последовательностям, в которых используются пары «индекс-значение».

#Вот так не нужно делать
for i in range(len(array)):
    #действия с i
    #действия с array[i]
#А так нужно, да и еще и удобно!
for i, val in enumerate(array):
    #действия с i
    #действия val

Используемая функция enumerate()  возвращает кортеж, состоящий из пар «индекс-значение». В примере это i и val. Еще функция умеет смещаться — для этого нужно передать ей индекс, с которого нужно начать перебор.

Цикл в обратном порядке в Python

И последнее, что рассмотрим в этой статье — это цикл по последовательности в обратном порядке. Циклы в Python конечно-же можно строить и с конца последовательности, постепенно приближаясь к ее началу. Только делать это нужно правильно.

#Вот так в обратном порядке последовательность не перебирают
for val in range(len(array) - 1, -1, -1):
    #действия
#А вот так перебирают. Оцените удобство!
for val in reversed(array)
    #действия

Функция reversed() просто перебирает последовательность в обратном порядке. Большего о ней рассказать нельзя. Берет последовательность, перебирает с конца, и точка.

 

На этом все. В статье показаны три общие идиомы для циклов, которые вероятно помогут вам сделать код лаконичнее и читабельней. Согласитесь, это: reversed(array) понять гораздо проще, чем это: range(len(array) -1, -1, -1).

Спасибо Jamal Moir за замечательные советы.

Операции со списками python на примерах ~ PythonRu

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

Создать списки Python

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

my_list = [1, 2, 3, 4, 5]

Список может выглядеть так:

my_list = ['один', 'два', 'три', 'четыре', 'пять']

Можно смешивать типы содержимого:

my_list = ['один', 10, 2.25, [5, 15], 'пять']

Поддерживаются вложенные списки как в примере выше.

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

third_elem  =  my_list[2]

Принцип похож на строки.

Изменение списка

Списки — это изменяемые объекты, поэтому их элементы могут изменяться, или же может меняться их порядок.

Если есть такой список:

my_list = ['один', 'два', 'три', 'четыре', 'пять']

То его третий элемент можно изменить следующим образом:

my_list[2]  =  'ноль'

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

['один', 'два', 'ноль', 'четыре', 'пять']

Если индекс — отрицательное число, то он будет считаться с последнего элемента.

my_list = ['один', 'два', 'три', 'четыре', 'пять']
elem  =  my_list[-1]
print(elem)

Вывод этого кода — ‘пять’.

Проход (итерация) по списку

Читать элементы списка можно с помощью следующего цикла:

my_list = ['один', 'два', 'три', 'четыре', 'пять']
for elem in my_list:
    print(elem)

Таким образом можно читать элементы списка. А вот что касается их обновления:

my_list = [1, 2, 3, 4, 5]
for i in range(len(my_list)):
    my_list[i]+=5
    print(my_list)

Результат будет следующим:

[6, 7, 8, 9, 10]

Функция len() используется для возврата количества элементов, а range() — списка индексов.

Стоит запомнить, что вложенный список — это всегда один элемент вне зависимости от количества его элементов.

my_list = ['один', 10, 2.25, [5, 15], 'пять']
print(len(my_list))

Результат кода выше — 5.

Срез списка

Можно получить срез списка с помощью оператора (:):

my_list = ['один', 'два', 'три', 'четыре', 'пять']
print(my_list[1:3])

Результат кода выше — ['два', 'три']

Если убрать первое число, от срез будет начинаться с первого элемента, а если второе — с последнего.

Если убрать числа и оставить только двоеточие, то скопируется весь список.

my_list = ['один', 'два', 'три', 'четыре', 'пять']
print(my_list[1:3])
print(my_list[1:])
print(my_list[:3])
print(my_list[:])

Результат этого года:

['два', 'три']
['два', 'три', 'четыре', 'пять']
['один', 'два', 'три']
['один', 'два', 'три', 'четыре', 'пять']

Поскольку списки изменяемые, менять элементы можно с помощью оператора среза:

my_list = ['один', 'два', 'три', 'четыре', 'пять']
my_list[1:3]  =  ['Привет',  'Мир']
print(my_list)

Результат:

['один', 'Привет', 'Мир', 'четыре', 'пять']

Вставить в список

Метод insert можно использовать, чтобы вставить элемент в список:

my_list = [1, 2, 3, 4, 5]
my_list.insert(1,'Привет')
print(my_list)

Результат:

[1, 'Привет', 2, 3, 4, 5]

Индексы для вставляемых элементов также начинаются с нуля.

Добавить в список

Метод append можно использовать для добавления элемента в список:

my_list = ['один', 'два', 'три', 'четыре', 'пять']
my_list.append('ещё один')
print(my_list)

Результат:

['один', 'два', 'три', 'четыре', 'пять', 'ещё один']

Можно добавить и больше одного элемента таким способом:

my_list = ['один', 'два', 'три', 'четыре', 'пять']
list_2  =  ['шесть',  'семь']
my_list.extend(list_2)
print(my_list)

Результат:

['один', 'два', 'три', 'четыре', 'пять', 'шесть',  'семь']

При этом list_2 не поменяется.

Отсортировать список

Для сортировки списка нужно использовать метод sort.

my_list = ['cde', 'fgh', 'abc', 'klm', 'opq']
list_2 = [3, 5, 2, 4, 1]
my_list.sort()
list_2.sort()
print(my_list)
print(list_2)

Вывод:

['abc', 'cde', 'fgh', 'klm', 'opq']
[1, 2, 3, 4, 5]

Перевернуть список

Можно развернуть порядок элементов в списке с помощью метода reverse:

my_list = [1, 2, 3, 4, 5]
my_list.reverse()
print(my_list)

Результат:

[5, 4, 3, 2, 1]

Индекс элемента

Метод index можно использовать для получения индекса элемента:

my_list = ['один', 'два', 'три', 'четыре', 'пять']
print(my_list.index('два'))

Результат 1.

Если в списке больше одного такого же элемента, функция вернет индекс первого.

Удалить элемент

Удалить элемент можно, написав его индекс в методе pop:

my_list = ['один', 'два', 'три', 'четыре', 'пять']
removed = my_list.pop(2)
print(my_list)
print(removed)

Результат:

['один', 'два', 'четыре', 'пять']
три

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

my_list = ['один', 'два', 'три', 'четыре', 'пять']
removed = my_list.pop()
print(my_list)
print(removed)

Результат:

['один', 'два', 'три', 'четыре']
пять

Элемент можно удалить с помощью метода remove.

my_list = ['один', 'два', 'три', 'четыре', 'пять']
my_list.remove('два')
print(my_list)

Результат:

['один', 'три', 'четыре', 'пять']

Оператор del можно использовать для тех же целей:

my_list = ['один', 'два', 'три', 'четыре', 'пять']
del my_list[2]
print(my_list)

Результат:

['один', 'два', 'четыре', 'пять']

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

my_list = ['один', 'два', 'три', 'четыре', 'пять']
del my_list[1:3]
print(my_list)

Результат:

['один', 'четыре', 'пять']

Функции агрегации

В Python есть некоторые агрегатные функции:

my_list = [5, 3, 2, 4, 1]
print(len(my_list))
print(min(my_list))
print(max(my_list))
print(sum(my_list))

sum() работает только с числовыми значениями.

А max(), len() и другие можно использовать и со строками.

Сравнить списки

В Python 2 сравнить элементы двух списком можно с помощью функции cmp:

my_list = ['один', 'два', 'три', 'четыре', 'пять']
list_2 = ['три', 'один', 'пять', 'два', 'четыре']
print(cmp(my_list,list_2))

Она вернет -1, если списки не совпадают, и 1 в противном случае.

В Python 3 для этого используется оператор (==):

my_list = ['один', 'два', 'три', 'четыре', 'пять']
list_2 = ['три', 'один', 'пять', 'два', 'четыре']
if (my_list == list_2):
    print('cовпадают')
else:
    print('не совпадают')

Результат не совпадают.

Математические операции на списках:

Для объединения списков можно использовать оператор (+):

list_1 = [1, 2, 3]
list_2 = [4, 5, 6]
print(list_1 + list_2)

Результат:

[1, 2, 3, 4, 5, 6]

Список можно повторить с помощью оператора умножения:

list_1 = [1, 2, 3]
print(list_1  *  2)

Результат:

[1, 2, 3, 1, 2, 3]

Списки и строки

Для конвертации строки в набор символов, можно использовать функцию list:

my_str = 'Monty Python'
my_list = list(my_str)
print(my_list)

Результат:

['M', 'o', 'n', 't', 'y', ' ', 'P', 'y', 't', 'h', 'o', 'n']

Функция list используется для того, чтобы разбивать строку на отдельные символы.

Можно использовать метод split для разбития строки на слова:

my_str = 'Monty Python'
my_list = my_str.split()
print(my_list)

Результат:

['Monty', 'Python']

Она возвращает обычный список, где с каждым словом можно взаимодействовать через индекс.

Символом разбития может служить любой знак, а не только пробел.

my_str = 'Monty-Python'
my_list = my_str.split('-')
print(my_list)

Результат будет аналогичен:

['Monty', 'Python']

Объединить список в строку

Обратный процесс — объединение элементов списка в строку.

Это делается с помощью метода join:

my_list = ['Monty', 'Python']
delimiter = ' '
output = delimiter.join(my_list)
print(output)

Результат Monty Python.

Алиасинг (псевдонимы)

Когда две переменные ссылаются на один и тот же объект:

my_list = ['Monty', 'Python']
list_2 = my_list

Алиасинг значит, что на объект ссылается больше одного имени.

Следующий пример показывает, как меняются изменяемые списки:

my_list = ['Monty', 'Python']
list_2 = my_list
list_2[1] = 'Java:)'
print(my_list)

Результат:

['Monty', 'Java:)']

Изменился список list_2, но поскольку он ссылается на один и тот же объект, то оригинальный список тоже поменялся.
Использовать “псевдонимы” при работе со списками не рекомендуется.
В целом, работать со списками в Python очень просто.

вывести цифры на экран от 1 до 10 в обратном порядке числа python​

Строка с максимальной суммой элементов.Программирование c++
В заданном двумерном массиве целых чисел A требуется найти и вывести индекс
строки, сумма

элементов которой максимальна.
Input
Со стандартного устройства ввода в первой строке вводятся 2 целых числа M и N —
соответственно количество строк и столбцов двумерного массива A: 1&lt;=M&lt;=100,
1&lt;=N&lt;=100. В следующих M строках вводятся ровно по N элементов, являющихся
элементами двумерного массива A. Все значения в массиве от -100 до 100.
Output
Требуется вывести индекс строки, сумма элементов которой максимальна. Выводить
пробел в конце не нужно.
Sample Input
3 3
1 2 3
4 5 6
7 8 9
Sample Output
2

Строка с максимальной суммой элементов.С++
В заданном двумерном массиве целых чисел A требуется найти и вывести индекс
строки, сумма элементов которой

максимальна.
Input
Со стандартного устройства ввода в первой строке вводятся 2 целых числа M и N —
соответственно количество строк и столбцов двумерного массива A: 1&lt;=M&lt;=100,
1&lt;=N&lt;=100. В следующих M строках вводятся ровно по N элементов, являющихся
элементами двумерного массива A. Все значения в массиве от -100 до 100.
Output
Требуется вывести индекс строки, сумма элементов которой максимальна. Выводить
пробел в конце не нужно.
Sample Input
3 3
1 2 3
4 5 6
7 8 9
Sample Output
2

C++!! Левый и правый двоичный поискДано два списка чисел, числа в первом списке упорядочены по неубыванию. Для каждого числа из второго списка определ

ите номер первого и последнего появления этого числа в первом списке. В данной задаче можно пользоваться встроенными функциями.Входные данныеВ первой строке входных данных записаны два числа N и M (1≤N,M≤20000). Во второй строке записаны N упорядоченных по неубыванию целых чисел — элементы первого списка. В третьей строке записаны M целых неотрицательных чисел — элементы второго списка. Все числа в списках — целые 32-битные знаковые.Выходные данныеПрограмма должна вывести M строчек. Для каждого числа из второго списка нужно вывести номер его первого и последнего вхождения в первый список. Нумерация начинается с единицы. Если число не входит в первый список, нужно вывести одно число 0.ПримерыВвод10 51 1 3 3 5 7 9 18 18 5757 3 9 1 17910 10Вывод3 47 71 20Можно этот код переделать в С++!s1 = input()s2 = input()s3 = input()A = set(map(int, s2.split()))B = list(map(int, s3.split()))for b in B:~~~~if b in A:~~~~~~~~print(‘YES’)~~~~else:~~~~~~~~print(‘NO’)Только чтоб работал!

C++!! Upper boundНа вход подаются N целых чисел, а также набор из M запросов, каждый из которых — целое число.9.Выходные данныеВыведите единственную строку с M целыми числами — количествами чисел исходного массива, меньших либо равных соответствующему запросу.ПримерыВвод51 5 3 2 124 3Вывод4 4ОграниченияВремя выполнения: 3 секунды

30 балов! Срочно!
===============================
#pgzero
WIDTH = 300 # Ширина окна
HEIGHT = 300 # Высота окна
TITLE = «Призрак в замке» # Заголовок о

кна игры
FPS = 30 # Количество кадров в секунду
# Объекты
ghost = Actor(‘ghost’, (150, 150))
fon = Actor(«bg»)
def draw():
fon.draw()
ghost.draw()
========================================================
Создайте еще одну собственную мини-игру!
Напишите код управления приведением в замке по стрелкам: влево, вправо, вверх, вниз.
А для того, чтобы получилось еще интереснее напишите код изменения скина при нажатии на пробел — эту проверку лучше прописать в функции on_key_down(key): если кнопка нажата и сейчас скин ghost, то он меняется на ghost1, иначе, если нажат пробел и сейчас скин ghost1, то он меняется на ghost.
Не забудьте написать проверку на то, что призрак не уйдет за границы окна игры!

ПОМОГИТЕ, ПОЖАЛУЙСТААА!!!!вот ввожу и никак не могу получить ответ, ЧТО БДУЕТ ВЫВВЕДЕНО НА ЭКРАН ПОСЛЕ ЭТОЙ ПРОГРАММЫ. у пеня выходит ошибка, ответ не

принимает

СРОЧНО 30 Б . Как можно использовать стили для создания структуры документа?

Быстрое возведение в степень Возводить в степень можно гораздо быстрее, чем за n умножений! Для этого нужно воспользоваться следующими рекуррентными с

оотношениями: an=(a2)n/2 при чётном n, an=a∗an−1 при нечётном n. Реализуйте алгоритм быстрого возведения в степень. Если вы всё сделаете правильно, то количество умножений будет иметь порядок log2n. Нельзя использовать операцию возведения в степень. Входные данные: Вводится действительное число a и целое неотрицательное число n. Выходные данные: Выведите ответ на задачу.
Примеры: Ввод 2 7 Вывод 128 Ввод 1.00001 100000 Вывод 2.71827
ппппппппппппппиииииииииитттттттттттоооооооооооооооннннннннн

C++
Практичное число — это натуральное число n, такое что все меньшие натуральные числа могут быть представлены в виде суммы различных делителей числа

n. Например, 12 является практичным числом, поскольку все числа от 1 до 11 можно представить в виде суммы делителей 1, 2, 3, 4 и 6 этого числа (сами делители равны самим себе): 5 = 3 + 2; 7 = 6 + 1; 8 = 6+; 9 = 6 + 3; 10 = 6 + 3 + 1; 11 = 6 + 3 + 2.
Необходимо написать программу, которая считает количество практичных чисел, меньших N.
Input
В первой и единственной строке находится число N (1 ≤ N ≤ 200).
Output
Требуется вывести количество практичных чисел, меньших N.

Умоляю программисты это язык python помогите полностью с заданием пожалуйста!Невнимательный бухгалтер Антон складывает числа быстро, но иногда забывае

т о двух последних разрядах. Напишите программу, которая бы складывала только два последних разряда. Реализуйте программу, которая запрашивает два числа у пользователя. После этого у каждого числа возьмите две последние цифры. Получившиеся два числа сложите и выведите на экран. Пример: Введите первое число: 111 Введите Второе число: 904 Сумма: 15 Что оценивается • результат вычислений корректен; input содержит корректное приглашение для ввода; • переменные имеют значащие названия; пробелы после запятых, пробелы при бинарных операциях.​

Циклы for и while в Python

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

Циклы необходимы, если нам надо что-либо сделать множество раз, реализовать последовательность одинаковых действий. Речь идёт о выполнении какой-нибудь операции либо списков операций снова и снова. Циклы максимально упрощают этот процесс. Если говорить о вышеназванных циклах, то цикл for многие считают более популярным. С него и начнём.

Цикл for в Python

Как было сказано выше, использование цикла целесообразно, если нужно повторить действие n-ное количество раз, выполнить некую последовательность одних и тех же операций. Рассмотрим это на примере. Возьмём встроенную в Python 3 функцию range, которая создаёт список длиной в «n» элементов (в Python 2-й версии для этого надо было использовать функцию xrange — тоже генератор чисел, но не такой ресурсоёмкий).

print(range(5)) # ответ: range(0, 5)

Как видим, функция в Python взяла целое число, а вернула объект range. Также она принимает конечное значение, начальное значение и значение шага. Приведём ещё пару примеров:

a = range(5, 10)
print(a) # range(5, 10)
b = list(range(1, 10, 2))
print(b) # [1, 3, 5, 7, 9]

В первом примере мы передаём начальное и конечное значение, при этом range возвращает список из чисел последовательности, начиная с начального, заканчивая последним (но не включая последний). Таким образом, при запросе 5-10 мы получаем 5-9 в прямом, а не обратном порядке.

Во 2-м случае используем функцию списка (list). В результате возвращается каждый 2-й элемент между 1-10 (наша последовательность будет равна 1, 3 и т. п., разумеется, также в прямом, а не обратном порядке).

Закономерный вопрос: а что функция range будет делать с использованием цикла? Давайте посмотрим:

for number in range(5):
    print(number)

Что в данном случае произошло? Чтобы понять это, расшифруем наш код:
1. Мы вводим число для каждого числа в диапазоне 5.
2. Мы знаем, что при вызове range со значением 5 будет создан вложенный список из пяти элементов.
3. Каждый раз функция, проходя через цикл for, выведет каждый из этих элементов по списку.

Вышеупомянутый цикл for м. б. эквивалентом следующего:

for number in [0, 1, 2, 3, 4]:
    print(number)

Здесь range просто выдаёт меньший результат.

Что ещё «умеет» цикл for?

Цикл for способен обходить любой итератор Python. Мы видели особенности действия цикла при обработке списка и последовательности. А теперь взглянем, можно ли его использовать для выполнения итерации со словарём:

a_dict = {"one":1, "two":2, "three":3}
 for key in a_dict:
    print(key)

Если использовать for в словаре, легко заметить, что он перебирает ключи автоматически. К примеру, не нужно указывать for в a_dict.keys() (хотя это тоже работает). Python делает только то, что необходимо. Да, ключи выводятся в несколько другом порядке, который отличен от указанного в словаре. Однако словари не упорядочены, поэтому можно использовать итерацию над ними, а ключи при этом м. б. в любом порядке. Если вы знаете, что ключи можно отсортировать, это лучше сделать до итерации. Чтобы увидеть, как это работает, немного изменим словарь:

a_dict = {1:"one", 2:"two", 3:"three"}
keys = a_dict.keys()
keys = sorted(keys)
for key in keys:
    print(key)

Результат использования данного цикла for в Python следующий:

Давайте разберём код данного цикла for подробнее. Во-первых, был создан словарь, где ключи выступают вместо строк в качестве целых чисел. Во-вторых, мы извлекли из словаря ключи. Каждый раз при вызове метода keys(), он возвращает нам неупорядоченный список ключей. И если при выводе списка мы видим, что они находятся в прямом либо обратном порядке, это просто случайность.

Итак, получен доступ к ключам, хранимым в keys. Мы сортируем список, после чего нужно использовать цикл for в нём. Чтобы сделать процесс интереснее, попробуем использовать цикл for в функции range, однако для этого потребуется вывести лишь целые числа. Дабы это осуществить, придётся использовать условный оператор, а не параметр шага range, что делается так:

for number in range(10):
    if number % 2 == 0:
        print(number)

Результат работы цикла for таков:

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

После разговора о цикле for пришла пора познакомиться с циклом while.

Цикл while

Цикл while хорошо использовать для повторений частей кода. Здесь вместо зацикливания n-е количество раз цикл будет работать, пока не исполнится определённое условие.

Пример работы цикла while в Python:

i = 0
while i < 10:
    print(i)
    i = i + 1

Цикл while по сути — это один из вложенных условных операторов. Если говорить о коде цикла, который мы решили использовать выше, на экран будет выводиться переменная i до тех пор, пока она меньше десяти. То есть с запуском этого кода в Python вы получите список от 0 до 9, сформированный в прямом, а не обратном порядке, причём каждая цифра выведется в отдельной строке, и цикл завершится.

Однако, удалив часть кода с увеличением значения i, мы получим бесконечный цикл, а это уже плохо. Бесконечные циклы называют логическими ошибками, которых лучше избегать. Но это не значит, что в таком случае нельзя будет «вырваться» из цикла. Можно, если использовать вложенные функции в Python, например, break:

while i < 10:
    print(i)
        if i == 5:
        break
        i += 1

Узнать больше про Python-циклы вы всегда сможете на наших курсах. Изучайте циклы, списки, функции, классы и другие нюансы «Пайтона» вместе с OTUS!

циклов — как пройти по списку в обратном порядке в Python (index-style: только ‘… in range (…)’)

Давайте рассмотрим эту часть по частям:

len (my_list) равно 4. Таким образом, range (len (my_list) -1, 0) совпадает с range (3, 0) , что составляет [] в Python 2. (в Python 3, попробуйте список (диапазон (3, 0)) , чтобы увидеть тот же пустой список.)

Если вы хотите уменьшить диапазон, используйте отрицательный шаг (третий аргумент):

  диапазон (3, 0, -1)
  

дает [3, 2, 1] .Он не включает 0 , потому что даже для отрицательных шагов верхняя граница (второй аргумент) является исключительной, то есть не является частью результата. Кажется, вы справились с этим, инициализировав переменную temp последним массивом в my_list уже перед циклом then, а затем вычтя 1 из индекса при использовании его для доступа к содержимому my_list в цикле.

  my_list = [массив0, массив1, массив2, массив3]
temp = my_list [-1]
для k в диапазоне (len (my_list) - 1, 0, -1):
    temp = temp + my_list [k - 1]
возвратная температура
  

Таким образом,

, вероятно, будет работать.

Однако, если вам нужны индексы только для доступа к my_list , вы можете избавиться от них, напрямую перебирая элементы my_list в желаемом (здесь обратном) порядке:

  my_list = [массив0, массив1, массив2, массив3]
temp = empty_array # Не совсем уверен, что это должно быть. (Зависит от типа вашего массива.)
для массива в обратном порядке (my_list):
    temp = temp + массив
возвратная температура
  

Я предполагаю, что ваши массивы объединены в цикл.Если вместо этого это фактическое добавление (например, добавление вектора NumPy — хотя я не понимаю, почему порядок добавления будет иметь значение для этого, за исключением, возможно, точности, если значения в my_list отсортированы), используйте соответствующий ноль -element вместо empty_array .

Можно даже полностью избавиться от петли. Если вы хотите добавить свои массивы:

  my_list = [массив0, массив1, массив2, массив3]
сумма возврата (обратная (my_list))
  

Если вы хотите объединить их:

  из импортной сети itertools

my_list = [массив0, массив1, массив2, массив3]
список возврата (цепочка.from_iterable (обратный (my_list)))
  

Как перевернуть диапазон в Python

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

Синтаксис

 диапазон (начало, остановка, шаг) 

Параметры

  1. Аргумент start — это начальный номер серии.т.е. нижний предел. По умолчанию он начинается с 0, если не указан.
  2. Аргумент остановки — это верхний предел. то есть создавать числа до этого числа, range () не включает это число в результат.
  3. Шаг — это разница между каждым числом на выходе. Если не указано иное, значение шага по умолчанию равно 1.

Пример range ()

 для i в диапазоне (4, 24, 4):
    частное = i / 4
    print (f "{i} разделенное на 4 равно {int (частное)}.")
 

Run Online

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

Выход

 4, деленное на 4, равно 1.
8 делить на 4 равно 2.
12 разделить на 4 равно 3.
16 разделить на 4 равно 4.
20, разделенное на 4, составляет 5 

Увеличение с диапазоном () Функция

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

 для i в диапазоне (3, 24, 10):
    печать (f "{i}")
 

Запустить онлайн

Выход

 3
13
23 

У вас есть диапазон чисел, каждое из которых на 10 больше предыдущего, и это шаг, который вы указали.

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

Python range reverse

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

 для i в диапазоне (5, 0, -1):
    печать (f "{i}")
 

Запустить онлайн

Выход

 5
4
3
2
1 

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

Чтобы перевернуть диапазон (5, 0, -1), ваши шаги должны быть следующими.

  1. Ваш старт должен быть максимальным числом вашего диапазона.
  2. Ваш стоп должен быть минимальным числом — 1 в вашем диапазоне.
  3. Вы должны уменьшить на 1 (-1), чтобы получить точную противоположность вашего списка.

В приведенном выше коде нам нужно изменить 1 на 5, что означает 5 на 1. Итак, наше максимальное начальное значение, равное 5, затем минимальное значение -1 означает, что 1-1 равно 0, что является конечным значением, и мы не включили это значение в диапазон.Тогда наш шаг равен -1. Это означает, что 5, 5-1 = 4, 5-2 = 3, 5-3 = 2, 5-4 = 1. Итак, получаем точное обратное значение.

Это не стандартный способ, но если вы хотите изменить любой тип range (), вы должны точно рассчитать все шаги. Не каждый раз так будет. Давайте посмотрим на стандартный способ перевернуть элементы диапазона.

Питонический способ обратного диапазона ()

Самый питонический способ создания диапазона, который уменьшается, — это использовать диапазон (начало, остановка, шаг). Но Python предоставляет нам встроенную функцию reversed (). Если вы заключите метод range () в метод reversed (), вы можете распечатать целые числа в обратном порядке.

 для i в обратном порядке (диапазон (5)):
    печать (я)
 

Запустить онлайн

Выход

 5
4
3
2
1
0 

Диапазон () позволяет легко перебирать убывающую серию чисел, тогда как reverse () используется для перебора серии в обратном порядке.

Заключение

Чтобы отменить range () в Python, мы можем использовать reverse () с функцией range ().Кроме того, если вы знаете точную разницу между числами, вы можете изменить диапазон, указав отрицательный шаг. Это все для обратного диапазона Python.

Обратная итерация в Python — GeeksforGeeks

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

Метод № 1: Использование reversed ()
Самый простой способ выполнить это — использовать обратную функцию для цикла для , и итерация начнется с обратной стороны, чем при обычном подсчете.

N = 6

печать ( " 0005 ( 000", 000500050005, 0005, 0005, перевернутые числа: )

для число в обратное ( диапазон (N + 1 )):

= "" )

Выход:

Перевернутые числа: 6 5 4 3 2 1 0
 

Метод № 2: Использование диапазона (N, -1, -1)
Эта конкретная задача также может быть выполнена с помощью обычной функции диапазона, которая, если ей предоставлен третий аргумент, выполняет пропуск и второй аргумент. используется для начала в обратном направлении.

N = 6

печать ( : , перевернутые числа: "")

для число в диапазоне (N, - 1 , - 1 ): 0003 0003 (число, конец = "" )

Выход:

Перевернутые числа: 6 5 4 3 2 1 0
 

Внимание компьютерщик! Укрепите свои основы с помощью курса Python Programming Foundation и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS . И чтобы начать свое путешествие по машинному обучению, присоединяйтесь к Машинное обучение - курс базового уровня

Программа Python для изменения диапазона в списке

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

Пример:

Ввод: test_list = [6, 3, 1, 8, 9, 2, 10, 12, 7, 4, 11], str, end = 3, 9

Выход : [6, 3, 1, 7, 12, 10, 2, 9, 8, 4, 11]

Пояснение: 8, 9, 2, 10, 12, 7 в списке перевернуты на 7, 12 , 10, 2, 9, 8.

Вход: test_list = [6, 3, 1, 8, 9, 2, 10, 12, 7, 4, 11], str, end = 8, 9

Выход: [6, 3 , 1, 8, 9, 2, 10, 7, 12, 4, 11]

Объяснение: 12, 7 перевернуты в списке на 7, 12.

Метод № 1: Использование обратного ( ) + loop

В этом примере подсписок извлекается и реверсируется с помощью функции reverse (). Затем цикл используется для замены элементов диапазона на перевернутые элементы.

Python3

test_list = [ 6 , 3 , , 000 , 2 , 10 , 12 , 7 , 4 , 11 ] 0003

0003 000 "Исходный список:" + str (test_list))

strt, конец = 3 , 000 темп. = test_list [strt: end]

темп.reverse ()

для idx в диапазоне (strt, end):

test_list [idx] = strt 9000 temp 9000 -

print ( "Список обратных диапазонов:" + str (test_list))

Исходный список : [6, 3, 1, 8, 9, 2, 10, 12, 7, 4, 11]
Список обратных диапазонов: [6, 3, 1, 7, 12, 10, 2, 9, 8, 4, 11]

Метод № 2: Использование списка split () + нарезка

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

Python3

test_list = [ 6 , 3 , , 000 , 2 , 10 , 12 , 7 , 4 , 11 ] 0003

0003 000 "Исходный список:" + str (test_list))

strt, конец = 3 , 000 test_list [strt: end] = test_list [strt: end] [:: - 1 ]

печать ( "Список обратных диапазонов:" + str (test_list))

Вывод:

 Исходный список: 
 , 3, 1, 8, 9, 2, 10, 12, 7, 4, 11]
Список диапазонов с обратным диапазоном: [6, 3, 1, 7, 12, 10, 2, 9, 8, 4, 11] 

Внимание, компьютерщик! Укрепите свои основы с помощью курса Python Programming Foundation и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS . И чтобы начать свое путешествие по машинному обучению, присоединяйтесь к Машинное обучение - курс базового уровня

Как перевернуть список в Python - dbader.org

Автор: Дэн Бадер - Получайте бесплатные обновления новых сообщений здесь.

Пошаговое руководство по трем основным способам реверсирования списка или массива Python: реверсирование на месте, нарезка списка и обратная итерация.

Обращение списка - обычная операция в программировании на Python.

Например, представьте, что у вас есть отсортированный список имен клиентов, который ваша программа отображает в алфавитном (A-Z) порядке. Некоторые из ваших пользователей хотели бы просмотреть список клиентов, чтобы имена были в обратном алфавитном порядке. Как вы собираетесь перевернуть существующий список с ног на голову? Или другими словами:

Как лучше всего изменить порядок списка в Python?

В этой статье вы увидите три различных способа достижения этого результата в «простом ванильном» Python, то есть без использования каких-либо сторонних библиотек:

  1. Обратное отображение списка на месте со списком .reverse () метод
  2. Использование трюка нарезки списка « [:: - 1] » для создания перевернутой копии
  3. Создание обратного итератора со встроенной функцией reversed ()

Все примеры, которые я здесь использую, будут основаны на следующем объекте списка, содержащем числа от 1 до 5:

 # У вас это:
[1, 2, 3, 4, 5]

# А вы этого хотите:
[5, 4, 3, 2, 1]
 

Готовы? Давайте вместе перевернем несколько списков!

Вариант № 1: Реверсирование списка на месте с помощью списка

.reverse () Метод

Каждый список в Python имеет встроенный метод reverse () , который можно вызвать для изменения содержимого объекта списка на месте. Переворачивание списка на месте означает, что не будет создан новый список и скопированы в него существующие элементы в обратном порядке. Вместо этого он напрямую изменяет исходный объект списка.

Вот пример:

 >>> mylist = [1, 2, 3, 4, 5]
>>> мой список
[1, 2, 3, 4, 5]

>>> mylist.reverse ()
Никто

>>> мой список
[5, 4, 3, 2, 1]
 

Как видите, позвонив по номеру mylist.reverse () вернул Нет , но изменил исходный объект списка. Эта реализация была выбрана сознательно разработчиками стандартной библиотеки Python:

Метод reverse () изменяет существующую последовательность для экономии места при обращении большой последовательности. Чтобы напомнить пользователям, что он работает как побочный эффект, он не возвращает обратную последовательность. (Источник: Python 3 Docs)

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

Однако при обратном изменении списка на месте исходный порядок сортировки перезаписывается. Это может быть потенциальным недостатком. (Конечно, чтобы восстановить исходный порядок, вы можете просто перевернуть тот же список снова .)

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

Вариант № 2: Использование трюка с нарезкой «

[:: - 1] » для инвертирования списка Python

Объекты списка

Python имеют интересную функцию, называемую нарезкой . Вы можете рассматривать его как расширение синтаксиса индексации квадратных скобок. Он включает особый случай, когда нарезка списка с помощью « [:: - 1] » дает перевернутую копию :

 >>> мой список
[1, 2, 3, 4, 5]

>>> mylist [:: - 1]
[5, 4, 3, 2, 1]
 

Такое реверсирование списка занимает больше памяти по сравнению с реверсированием на месте, поскольку оно создает (неглубокую) копию списка.А для создания копии необходимо выделить достаточно места для хранения всех существующих элементов.

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

Самым большим недостатком обращения списка с синтаксисом нарезки является то, что он использует более продвинутую функцию Python, которую некоторые люди назвали бы «загадочной».«Я их не виню - нарезка списков выполняется быстро, но также немного трудна для понимания, когда впервые сталкиваешься с ее причудливым синтаксисом.

Когда я читаю код Python, который использует нарезку списка, мне часто приходится замедляться и концентрироваться, чтобы «мысленно проанализировать» утверждение, чтобы убедиться, что я понимаю, что происходит. Моя самая большая проблема заключается в том, что синтаксис нарезки « [:: - 1] » не передает достаточно четко, чтобы создать перевернутую копию исходного списка.

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

Боковая панель: как нарезка списка работает в Python?

Такое реверсирование списка использует синтаксис Python «нарезки», который можно использовать для ряда интересных вещей. При разрезании списка используется синтаксис индексации « [] » со следующим шаблоном « [начало: стоп: шаг] »:

 >>> mylist [начало: конец: шаг]
>>> мой список
[1, 2, 3, 4, 5]
>>> mylist [1: 3]
[2, 3]
 

Добавление индекса « [1: 3] » указывает Python дать нам фрагмент списка от индекса 1 до индекса 2.Чтобы избежать единичных ошибок, важно помнить, что верхняя граница - , исключая - вот почему мы получили только [2, 3] в качестве подсписка из среза [1: 3] .

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

 >>> mylist [:]
[1, 2, 3, 4, 5]
 

Параметр шага , иногда называемый шагом шаг , также представляет интерес.Вот как вы можете создать копию списка, который включает только всех остальных элементов оригинала:

 >>> mylist [:: 2]
[1, 3, 5]
 

Ранее мы использовали тот же «пошаговый» трюк, чтобы перевернуть список с помощью нарезки:

 >>> mylist [:: - 1]
[5, 4, 3, 2, 1]
 

Мы просим Python предоставить нам полный список ( :: ), но пройти по всем элементам от начала до конца, установив шаг на -1. Довольно аккуратно, а?

Вариант № 3: Создание обратного итератора с

reversed () Встроенная функция

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

 >>> mylist = [1, 2, 3, 4, 5]
>>> для элемента в перевернутом виде (мой список):
... печать (элемент)
5
4
3
2
1
>>> мой список
>>> [1, 2, 3, 4, 5]
 

Использование reversed () не изменяет исходный список. Фактически все, что мы получаем, - это «представление» в существующий список, которое мы можем использовать для просмотра всех элементов в обратном порядке.Это мощный метод, использующий протокол итератора Python.

Пока что все, что мы сделали, это итерация по элементам списка в обратном порядке. Но как вы можете создать перевернутую копию списка, используя функцию Python reversed () ?

Вот как:

 >>> mylist = [1, 2, 3, 4, 5]
>>> список (перевернутый (mylist))
[5, 4, 3, 2, 1]
 

Обратите внимание, как я вызываю конструктор list () для результата функции reversed () ?

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

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

Резюме: обращение списков в Python

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

Вариант 1: list.reverse ()

Списки

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

 >>> lst = [1, 2, 3, 4, 5]
>>> lst.reverse ()
>>> lst
[5, 4, 3, 2, 1]
 
  • Переворачивает список на месте
  • Быстро, не занимает лишнюю память
  • Изменяет исходный список

Вариант 2: Уловка нарезки списка

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

 >>> lst = [1, 2, 3, 4, 5]
>>> lst [:: - 1]
[5, 4, 3, 2, 1]
 
  • Создает перевернутую копию списка
  • Занимает память, но не изменяет исходный

Вариант 3: , обратное ()

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

 >>> lst = [1, 2, 3, 4, 5]
>>> список (перевернутый (lst))
[5, 4, 3, 2, 1]
 
  • Возвращает итератор , который возвращает элементы в обратном порядке
  • Не модифицирует оригинальный
  • Возможно, потребуется снова преобразовать в объект списка

Если вам интересно, какой «лучший» способ перевернуть список в Python, я отвечу: «Это зависит от обстоятельств». Лично мне нравится первый и третий подход:

  • Список .Метод reverse () быстрый, понятный и говорит сам за себя. Если у вас есть ситуация, когда вы хотите перевернуть список на месте и не хотите копировать, и можно изменить оригинал, я бы выбрал этот вариант.

  • Если это невозможно, я бы склонился к подходу с обратным итератором, когда вы вызываете reversed () в объекте списка и либо циклически просматриваете элементы один за другим, либо вызываете функцию list () , чтобы создать перевернутую копию.Мне нравится это решение, потому что оно быстрое и четко заявляет о своей цели.

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

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

Если вы хотите углубиться в тему, обязательно посмотрите мой учебник YouTube по переворачиванию списка в Python. Он также встроен в верхнюю часть статьи. Удачного питонинга!

Обратный список Python: пошаговое руководство

Вы можете перевернуть список в Python, используя встроенные методы reverse () или reverse () . Эти методы перевернут список без создания нового списка.Python reverse () и reversed () перевернет элементы в исходном объекте списка.


Обращение списка - обычная часть любого языка программирования. В этом руководстве мы разберем наиболее эффективные методы обратного списка Python.

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

Списки Python и нарезка списков: напоминание

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

Нарезка списка

Найди свой матч на тренировочном лагере

Ханна Имоджен Льюис Питер
1 2 3