реверсивный список с использованием нотации среза

в следующем примере:

foo = ['red', 'white', 'blue', 1, 2, 3] 

где: foo[0:6:1] будет печатать все элементы в foo. Однако foo[6:0:-1] опускает 1-й или 0-й элемент.

 >>> foo[6:0:-1] [3, 2, 1, 'blue', 'white'] 

Я понимаю, что я могу использовать foo.reverse () или foo [:: – 1], чтобы распечатать список в обратном порядке, но я пытаюсь понять, почему foo [6: 0: -1] не печатает весь список ?

4 Solutions collect form web for “реверсивный список с использованием нотации среза”

Обозначение фрагмента одним словом:

 [ <first element to include> : <first element to exclude> : <step> ] 

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

 foo[::-1] 

Вы также можете найти полезную информацию о кусочках Python в целом здесь:
Объяснить нотацию фрагмента Python

… почему foo [6: 0: -1] не печатает весь список?

Поскольку среднее значение является исключительным , а не включенным, значением стоп-значения. Интервальная нотация : [start, stop].

Именно так работает диапазон [x]:

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

Это индексы, которые включаются в ваш результирующий список, и они не включают 0 для первого элемента.

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

Другой способ взглянуть на это:

 >>> L = ['red', 'white', 'blue', 1, 2, 3] >>> L[0:6:1] ['red', 'white', 'blue', 1, 2, 3] >>> len(L) 6 >>> L[5] 3 >>> L[6] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range 

Индекс 6 находится за пределами (одно прошлое, точно) допустимых индексов для L, поэтому исключая его из диапазона как исключенное стоп-значение:

 >>> range(0, 6, 1) [0, 1, 2, 3, 4, 5] 

Все еще дает вам индексы для каждого элемента в списке.

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

[ В : В : Встряхните все это ]

[Первый элемент для ввода: первый элемент, который нужно оставить: шаг для использования]

YMMV

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

 >>> L = list(range(10)) >>> L [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> (start_ex, end) = (7, 0) >>> L[end:start_ex][::-1] [6, 5, 4, 3, 2, 1, 0] 
  • Список возврата Python из функции
  • В чем разница между = b и a = b
  • Учитывая список словарей, как я могу устранить дубликаты одного ключа и сортировать по другому
  • Замена слова в списке со значением из dict
  • Как отключить перенаправление реестра на Python?
  • Удаление элемента из списка - во время итерации - что случилось с этой идиомой?
  • Как оптимально превратить многомерный список в один список элементов в Python?
  • python, сортировка списка с помощью ключа, который является подстрокой каждого элемента
  • Python - лучший язык программирования в мире.