[python] итерация по спискам разной длины

Модератор: Модераторы разделов

Goner
Сообщения: 153

[python] итерация по спискам разной длины

Сообщение Goner »

Надо обойти список в обратном направлении. Списки бывают разной длины (от 4 до 1).

Код: Выделить всё

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


Если my_ls = ['one'], то не печатает вообще ничего.
Причем, если это запустить в собственной оболочке питона, то выдает желанный 0.

Как бы обойти эту засаду?
Питон 2.6.6 на Debian Squeeze
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: [python] итерация по спискам разной длины

Сообщение serzh-z »

Код: Выделить всё

for x in reversed(range(len(my_ls))):
    print x
Спасибо сказали:
Goner
Сообщения: 153

Re: [python] итерация по спискам разной длины

Сообщение Goner »

serzh-z писал(а):
30.11.2011 02:23

Код: Выделить всё

for x in reversed(range(len(my_ls))):
    print x


Спасибо. Я понял, в чем дело. Спать надо вовремя ложиться :)
Выше поставил условие, разрешающее использовать только списки с длиной > 1
И, как водится, забыл про это. Извините, что побеспокоил.

Кстати, reversed() вроде памяти должен меньше кушать, чем [::-1], или все равно?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: [python] итерация по спискам разной длины

Сообщение serzh-z »

Goner писал(а):
30.11.2011 02:31
Кстати, reversed() вроде памяти должен меньше кушать, чем [::-1], или все равно?
"reversed" возвращает итератор, "[::-1]" - новый список, являющийся копией того списка, что вернул range. Вывод очевиден: "[::-1]" - это лишняя операция копирования.
Спасибо сказали:
Аватара пользователя
deadhead
Сообщения: 1913
Статус: zzz..z

Re: [python] итерация по спискам разной длины

Сообщение deadhead »

serzh-z писал(а):
30.11.2011 03:00
Вывод очевиден: "[::-1]" - это лишняя операция копирования.
и что, даже ссылочная модель Python'a не помогает?
[x] close
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: [python] итерация по спискам разной длины

Сообщение Portnov »

А как вы предполагаете сделать ссылку на «тот же список, только в обратном порядке», не строя этот самый перевёрнутый список?

Элементы списка, конечно, копироваться не будут (если только они не атомарного типа) — просто будет построен новый список (новая последовательность указателей).
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: [python] итерация по спискам разной длины

Сообщение watashiwa_daredeska »

Код: Выделить всё

for x in xrange(len(my_ls)-1, -1, -1):
    print x
Вообще ни одного списка, одни итераторы :)
Спасибо сказали: