Принятие у меня есть список object_list, который содержит объекты.
Я хочу проверить, ли мое текущее повторение, в первом или последнем.
for object in object_list:
do_something
if first_indexed_element:
do_something_else
if last_indexed_element:
do_another_thing
Как это может быть достигнуто? Я знаю, что могу использовать диапазон и считать индекс, но если чувства неуклюжий.
С уважением
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
Вы можете использовать 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;)
for index, obj in enumerate(object_list):
do_something
if index == 0:
do_something_else
if index == len(object_list)-1:
do_another_thing
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.
PS: list.size() - это len(list), конечно.
Вам просто нужно использовать счетчик, диапазон не нужен:
Допустим, ваш счетчик cpt
.
if cpt == 0:
print "first"
if cpt == len(object_list) - 1:
print "last"
править : решение enumerate может быть более элегантным.