【发布时间】:2020-09-07 10:49:53
【问题描述】:
我被一段代码卡住了,我似乎找不到解决错误的答案
我不断收到以下错误消息,但没有意义:
temp = times[i].split(', ')
IndexError: list index out of range
作为上下文,我正在抓取一个网站以获取有关登录日期和时间的信息,它检索登录日期和时间的文本版本,因此我正在转换时间到一个日期时间对象中,这样我就可以减去另一个日期时间对象并找出这个人是否迟到
我的第一步是用逗号(,)分隔日期和时间(都是一个字符串),然后将时间转换成一个日期时间对象,并在最后添加一个if语句来确认是否登录时间
如果我要删除 IF 语句,错误就会消失,这有点奇怪,如果我要将列表减少一个,它也会消失
from datetime import datetime, date
times = ['5/1/2020, 8:08:54', '5/1/2020, 10:07:09', '5/1/2020, 10:27:49', '5/1/2020, 10:53:14',
'5/1/2020, 11:57:46', '5/1/2020, 12:53:38', '5/1/2020, 2:04:52', '5/1/2020, 2:14:55']
#Analysts Shift
schedule = datetime.strptime('8:05:00', '%H:%M:%S').time()
for i in range(len(times)):
temp = times[i].split(', ')
a = datetime.strptime(temp[1], '%H:%M:%S').time()
if datetime.combine(date.today(), a) < datetime.combine(date.today(), schedule):
times.pop(i)
print(times)
【问题讨论】:
-
times.pop(i)您在迭代列表时会破坏性地改变列表,这通常是个坏主意。range(len(times))设置了一个range对象,其长度是原始列表的长度,但是您正在使该列表在循环中变得更小,因此i最终超过了变异列表的长度。 -
我想我最终会创建一个新列表,它不会给我错误消息,我会用 newlist.append(times[i]) 或类似的替换 times.pop()
-
这肯定更惯用。
标签: python list loops for-loop indexing