Проверка Python первый и последний индекс списка

Принятие у меня есть список object_list, который содержит объекты.

Я хочу проверить, ли мое текущее повторение, в первом или последнем.

for object in object_list:
    do_something
    if first_indexed_element:
        do_something_else
    if last_indexed_element:
        do_another_thing

Как это может быть достигнуто? Я знаю, что могу использовать диапазон и считать индекс, но если чувства неуклюжий.

С уважением

10
задан Hellnar 3 August 2010 в 08:09
поделиться

6 ответов

li = iter(object_list)

obj = next(li)

do_first_thing_with(obj)

while True:
    try:
        do_something_with(obj)
        obj = next(li)
    except StopIteration:
        do_final_thing_with(obj)
        break
13
ответ дан 3 December 2019 в 14:43
поделиться

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

for i, obj in enumerate(object_list):
    do_something
    if i == 0:
        do_something_else
    if i == len(object_list) - 1:
        do_another_thing

Но вместо того, чтобы проверять на каждой итерации, с каким объектом вы имеете дело, может быть лучше что-то вроде этого:

def do_with_list(object_list):
    for obj in object_list:
        do_something(obj)
    do_something_else(object_list[0])
    do_another_thing(object_list[-1])

Представьте, что у вас есть список из 100 объектов, то вы делаете 198 ненужных сравнений, потому что текущий элемент не может быть первым или последним элементом в списке.

Но это зависит от того, должны ли операторы выполняться в определенном порядке и что они делают.


Между прочим. не затенять объект , это уже идентификатор в Python;)

15
ответ дан 3 December 2019 в 14:43
поделиться
for index, obj in enumerate(object_list):
    do_something
    if index == 0:
        do_something_else
    if index == len(object_list)-1:
        do_another_thing
3
ответ дан 3 December 2019 в 14:43
поделиться
first = True
for o in object_list:
    do_something(o)
    if first:
        first = False
        do_something_with_first(o)
if 'o' in locals():
    do_something_with_last(o)
1
ответ дан 3 December 2019 в 14:43
поделиться
  1. Вы можете сделать i = 0, а затем i++ в итерациях. Так, если i==0, то это первая итерация, если i == list.size()-1, то это последняя итерация.
  2. Должно быть что-то вроде indexOf(object), который возвращает позицию элемента в списке. если 0 - то первая итерация, если size()-1 - последняя. Но это дорого.
  3. используйте enumerate. См. посты Amber или Felix.
  4. сравнить текущий элемент с list[0] и с list[-1]. в первом случае - первая итерация, в последнем случае - последняя итерация. Это тоже дорого.

Так что я бы выбрал 1 или 3.
PS: list.size() - это len(list), конечно.

0
ответ дан 3 December 2019 в 14:43
поделиться

Вам просто нужно использовать счетчик, диапазон не нужен:

Допустим, ваш счетчик cpt .

if cpt == 0:
  print "first"

if cpt == len(object_list) - 1:
  print "last"

править : решение enumerate может быть более элегантным.

0
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: