Python for 循环时判断第一个和最后一个元素

Python for 循环时判断第一个和最后一个元素

Python 在对序列(可迭代对象)使用 for 循环进行迭代时,大部分情况是没有序号的,只能拿到值。如果想对序列中的第一个元素和最后一个元素进行特别的处理那应该怎么做呢?今天我们就来探讨一下这个问题。

开始前广告一下我的新书:

迭代时做标记

这种方法非常方便,先标记为是第一个,然后按迭代顺序,迭代完修改为不是第一个,这样就实现了对第一个元素的识别处理,参考代码如下:

items = [5, 1, 2, 4]
first = True
for i in items:
    if first:
        first = False
        print('first', i)
    else:
        print(i)
first 5
'''

以上只能实现首个元素的检测,无法做到最后一个元素的检测,我们再尝试其他方法。

设置一个计数器

可以设置一个计数器,这个计数器从 0 开始,每次进行迭代计数器加一,计数 1 时为首个元素,计数为序列长度时为最后一个:

items = [5, 1, 2, 4]
count = 0
for i in items:
    count +=1
    if count==1:
        print('first', i)
    elif count==len(items):
        print('last', i)
    else:
        print(i)
first 5
last 4
'''

用 enumerate() 标记

Python 的内置函数 enumerate() 能给可迭代变量给一个索引值,利用这个索引值,可以编写我们的逻辑:

items = [5, 1, 2, 4]
for i, v in enumerate(items):
    if i==0:
        print('first', v)
    elif i==len(items)-1:
        print('last', v)
    else:
        print(i)
first 5
last 4
'''

使用 Pandas

将数据构造为 Pandas 的 Series 然后利用其相关方法进行判断。 Series.items() 将惰性迭代(索引、值)元组。如果索引值为最小时为首个元素,最大时为最后一个元素:

import pandas as pd
items = [5, 1, 2, 4]
ser = pd.Series(items)
for i, v in ser.items():
    if i == ser.index.min():
        print('first', v)
    elif i == ser.index.max():
        print('last', v)
    else:
        print(i)