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

z = [1,2,3,4,2]
for item in z:
    if item != z[-1]:        
        print z.index(item)

Но вместо того, чтобы получить вывод "... 0 1 2 3," я бы получил "... 0 2 3."

Есть ли способ выполнить операцию для всех элементов, кроме последнего, в списке (если в списке есть ИДЕНТИАЛЬНЫЕ элементы), не используя решение типа «для диапазона х (len (list) - 1)»)? Т.е. я хочу продолжать использовать «для элемента в списке».

Большое спасибо!

0
Georgina 6 Сен 2010 в 22:10

5 ответов

Лучший ответ

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

for index, item in enumerate(z):
    if index != len(z)-1:
        print index
4
Andre Holzner 6 Сен 2010 в 18:12
def all_but_last(iterable):
    iterable= iter(iterable)

    try: previous= iterable.next()
    except StopIteration: return

    for item in iterable:
        yield previous
        previous= item

Поместите его в модуль и используйте там, где вам это нужно.

В вашем случае вы бы сделали:

for item in all_but_last(z):
0
tzot 4 Окт 2010 в 20:40

[z.foo() for z in z[:-1]

1
leoluk 6 Сен 2010 в 18:12
for index, item in enumerate(your_list):
    do_something
1
Valentin Golev 6 Сен 2010 в 18:12

Используйте срез:

for item in z[:-1]:
    # do something
10
Peter Milley 6 Сен 2010 в 18:13