如何从日期列表移除周末?现有Python代码遗漏周六问题求助
问题原因
你这段代码的核心问题是遍历列表时直接删除元素,导致索引错位。
举个例子:假设处理周六的循环里,列表是[周六A, 周六B],当i=0时删除了周六A,列表会变成[周六B],但循环的i会继续递增到1,此时列表长度已经是1,i=1超出了列表范围,循环直接结束,周六B就被漏掉了。
之前把周六、周日的判断放在同一个循环里时问题更严重——删除一个元素后,后续元素会往前移位,但循环的i仍按原顺序递增,直接跳过了移位后的元素,导致大量周末日期没被删除。
解决方法
推荐两种可靠的写法:
方法1:创建新列表过滤(最简洁)
直接生成仅包含工作日的新列表,彻底规避索引问题:
def clear_weekends(date_list): return [date for date in date_list if date.isoweekday() < 6]
方法2:反向遍历删除(原地修改列表)
如果必须原地修改原列表,就从后往前遍历——删除元素不会影响前面未遍历的元素索引:
def clear_weekends(date_list): for i in range(len(date_list)-1, -1, -1): if date_list[i].isoweekday() in (6, 7): del date_list[i] return date_list
用这两种写法测试,就不会再出现遗漏周六的情况了。
内容的提问来源于stack exchange,提问作者MThiele
相关产品推荐
相关产品推荐

