假设我有一个包含对象的object_list列表。
我想检查我当前的迭代是在第一个还是最后一个。
for object in object_list:
do_something
if first_indexed_element:
do_something_else
if last_indexed_element:
do_another_thing
如何实现这一目标?我知道我可以使用范围和计数索引但是如果感觉笨拙的话。
此致
答案 0 :(得分:15)
您可以使用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次不必要的比较,因为当前元素不能是列表中的第一个或最后一个元素。
但这取决于语句是否必须以某种顺序执行以及它们正在做什么。
顺便说一下。不要影object
,它已经是Python中的标识符;)
答案 1 :(得分:13)
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
答案 2 :(得分:3)
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 :(得分:1)
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)
答案 4 :(得分:0)
你只需要使用一个计数器,不需要范围:
假设您的计数器为cpt
。
if cpt == 0:
print "first"
if cpt == len(object_list) - 1:
print "last"
编辑:枚举解决方案可能更优雅。
答案 5 :(得分:0)
所以我选择1或3 PS:list.size()当然是len(列表)。