You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python用next()遍历日期列表取两相邻日期触发TypeError问题

实现Python列表中相邻datetime.date元素成对遍历

需求说明

  • 遍历存储datetime.date类型值的列表,每次同时取出两个相邻日期传入业务流程
  • 全程保留日期原生类型,不使用日期转文本再转回日期的冗余方案

初始错误实现

初始编写的代码如下:

import datetime

listdates=[datetime.date(2022, 2, 10),datetime.date(2022, 2, 11),datetime.date(2022, 2, 12),datetime.date(2022, 2, 13),datetime.date(2022, 2, 14)]

for a in listdates:
    print(a,next(a))

运行代码抛出如下异常:

TypeError: 'datetime.date' object is not an iterator

报错原因:next()仅可作用于迭代器对象,datetime.date是日期值类型,本身不是迭代器,无法通过调用next(a)拿到列表中的下一个元素。

正确实现方案

两种方案均全程操作原生datetime.date对象,无任何类型转换开销:

方案1:索引遍历(无依赖,逻辑直观)

遍历到列表倒数第二个元素截止,每次通过索引取当前位置和下一个位置的元素即可:

import datetime

listdates = [datetime.date(2022, 2, 10),datetime.date(2022, 2, 11),datetime.date(2022, 2, 12),datetime.date(2022, 2, 13),datetime.date(2022, 2, 14)]

for i in range(len(listdates) - 1):
    date_a = listdates[i]
    date_b = listdates[i+1]
    # 此处可直接将两个原生日期值传入业务流程
    print(date_a, date_b)

方案2:zip配对(更符合Python编码习惯)

利用zip将原列表和去掉首元素的切片列表逐位配对,自动生成相邻元素对,不需要手动维护索引:

import datetime

listdates = [datetime.date(2022, 2, 10),datetime.date(2022, 2, 11),datetime.date(2022, 2, 12),datetime.date(2022, 2, 13),datetime.date(2022, 2, 14)]

for date_a, date_b in zip(listdates, listdates[1:]):
    # 两个值均为原列表存储的原生datetime.date类型
    print(date_a, date_b)

两段代码运行输出一致:

2022-02-10 2022-02-11
2022-02-11 2022-02-12
2022-02-12 2022-02-13
2022-02-13 2022-02-14

内容的提问来源于stack exchange,提问作者Stumbling Through Data Science

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:39:16