Вызов списка () дважды на reverse () возвращает пустой список во второй раз

Я не понимаю результат этого кода:

aa = 'hello, world' bb = reversed(aa) print(bb) print(list(bb)) print(bb) dd = list(bb) print(dd) print(''.join(dd)) 

Результат:

 <reversed object at 0x025C8C90> ['d', 'l', 'r', 'o', 'w', ' ', ',', 'o', 'l', 'l', 'e', 'h'] <reversed object at 0x025C8C90> [] 

Почему dd [] ?

  • Строковый модуль python vs str
  • Python Decimal
  • Как разбить последовательность в соответствии с предикатом?
  • Python: простой способ игнорировать пустые строки при чтении файла
  • Как мне избавиться от «u» от декодированного объекта JSON?
  • Удаление записей из словаря на основе значений
  • Python Запустить подпроцесс демона и прочитать stdout
  • Переопределить метод на уровне экземпляра
  • One Solution collect form web for “Вызов списка () дважды на reverse () возвращает пустой список во второй раз”

    Это потому, что reversed создает итератор, который уже потрачен, когда вы вызываете list(bb) во второй раз.

     aa = 'hello, world' bb = reversed(aa) # Creates an iterator, not a list print(bb) # Prints "<reversed object at 0x10c619b90>" (that's the iterator) print(list(bb)) # Pops items from the iterator to create a list, then prints the list print(bb) # At this point the iterator is spent, and doesn't contain elements anymore dd = list(bb) # Empty iterator -> Empty list ([]) print(dd) print(''.join(dd)) print('----------') 

    Чтобы исправить это, просто измените reversed(aa) по list(reversed(aa)) .

    Python - лучший язык программирования в мире.