Как я могу использовать enumerate для обратного отсчета? - PullRequest
0 голосов
/ 17 мая 2018
letters = ['a', 'b', 'c']

Предположим, это мой список. Где for i, letter in enumerate(letters) будет:

0, a
1, b
2, c

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

2, a
1, b
0, c

Ответы [ 8 ]

0 голосов
/ 17 июля 2019

Это отличное решение и отлично работает:

items = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
for idx, item in enumerate(items, start=-len(items)):
    print(f"reverse index for {item}: {abs(idx)}")

Вот ВЫХОД приведенного выше фрагмента:

reverse index for a: 7
reverse index for b: 6
reverse index for c: 5
reverse index for d: 4
reverse index for e: 3
reverse index for f: 2
reverse index for g: 1

Вот что происходит вприведенный выше фрагмент:

  • enumerate 's start arg имеет отрицательное значение.
  • enumerate всегда делает шаг вперед.
  • Наконец, мы используем abs на idx, чтобы найти абсолютное значение, которое всегда положительно.
0 голосов
/ 17 мая 2018

Попробуйте это:

l = len(letters)
for i, letter in enumerate(letters):
    print(l-i, letters)
0 голосов
/ 17 мая 2018

Мы можем определить функцию полезности (в Python3.3 + )

from itertools import count


def enumerate_ext(iterable, start=0, step=1):
    indices = count(start, step)
    yield from zip(indices, iterable)

и используйте его прямо как

letters = ['a', 'b', 'c']
for index, letter in enumerate_ext(letters,
                                   start=len(letters) - 1,
                                   step=-1):
    print(index, letter)

или написать помощник

def reverse_enumerate(sequence):
    yield from enumerate_ext(sequence,
                             start=len(sequence) - 1,
                             step=-1)

и используйте его как

for index, letter in reverse_enumerate(letters):
    print(index, letter)
0 голосов
/ 17 мая 2018
letters = ['a', 'b', 'c']

for i, letter in zip(range(len(letters)-1, -1, -1), letters):
    print(i, letter)

отпечатки

2 a
1 b
0 c

Взято из ответа на аналогичный вопрос: Просматривать список в обратном порядке в Python

0 голосов
/ 17 мая 2018

Функция zip создает список поэлементных пар для двух списков параметров.

list(zip([i for i in range(len(letters))][::-1], letters))
0 голосов
/ 17 мая 2018

Я бы сначала попытался создать обратный список, затем вы можете использовать enumerate()

letters = ['a', 'b', 'c']
letters.reverse()
for i, letter in enumerate(letters)
0 голосов
/ 17 мая 2018

тл; др: размер - индекс - 1

Я предполагаю, что вопрос, который вы задаете, состоит в том, можно ли изменить индекс, если элемент одинаков, например, a имеет порядковый номер 2, когда он фактически имеет индекс 0.

Чтобы рассчитать это, учтите, что каждый элемент в вашем массиве или списке хочет иметь индекс элемента с таким же «расстоянием» (по индексу) от конца коллекции. Расчет это дает вам размер - индекс.

Однако многие языки программирования начинают массивы с индексом 0. Из-за этого нам нужно вычесть 1, чтобы индексы соответствовали должным образом. Рассмотрим наш последний элемент с индексом размера - 1. В нашем исходном уравнении мы получили бы размер - (размер - 1), который равен размеру - размеру + 1, который равен 1. Поэтому нам нужно вычесть 1.

Конечное уравнение (для каждого элемента): размер - индекс - 1

0 голосов
/ 17 мая 2018

Попробуйте это:

letters = ['a', 'b', 'c']
for i, letter in reversed(list(enumerate(reversed(letters)))):
    print(i, letter)

Вывод:

2 a
1 b
0 c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...