Python检查列表的第一个和最后一个索引

时间:2010-08-03 08:09:10

标签: python list

假设我有一个包含对象的object_list列表。

我想检查我当前的迭代是在第一个还是最后一个。

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

如何实现这一目标?我知道我可以使用范围和计数索引但是如果感觉笨拙的话。

此致

6 个答案:

答案 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. 您可以在迭代中使i = 0然后i ++。因此,如果i == 0,那么它是第一次迭代,如果i == list.size() - 1,那么它是最后一次迭代。
  2. 必须有像indexOf(object)这样的smth,它返回列表中元素的位置。如果0 - 比第一次迭代,如果size() - 1比最后一次。但它很贵。
  3. 使用枚举。请参阅Amber或Felix帖子。
  4. 将当前元素与列表[0]和列表[-1]进行比较。在第一种情况下 - 第一次迭代,在最后一种情况下 - 最后一次迭代。它也很贵。
  5. 所以我选择1或3 PS:list.size()当然是len(列表)。