如何使用python计算列表列表中的时间间隔?
我是Python的初学者,在计算时间间隔方面有困难 我将首先解释数据结构。sg_状态中每个列表中的第二个元素是代表交通信号灯特定状态的代码。代码“0”、“1”、“3”表示交通灯的最低绿灯状态。我想计算最小绿灯的持续时间。一个最小_绿色持续时间的定义是,最小_绿色_状态旁边的第一个其他状态的开始时间减去最小_绿色_状态的开始时间。然后,在列表中添加最小绿灯时间 我的解决方案:如何使用python计算列表列表中的时间间隔?,python,Python,我是Python的初学者,在计算时间间隔方面有困难 我将首先解释数据结构。sg_状态中每个列表中的第二个元素是代表交通信号灯特定状态的代码。代码“0”、“1”、“3”表示交通灯的最低绿灯状态。我想计算最小绿灯的持续时间。一个最小_绿色持续时间的定义是,最小_绿色_状态旁边的第一个其他状态的开始时间减去最小_绿色_状态的开始时间。然后,在列表中添加最小绿灯时间 我的解决方案: def get_minimum_green(sg_status): minimum_green_list =
def get_minimum_green(sg_status):
minimum_green_list = []
start_time_green = None
for i in range(len(sg_status)):
if not(sg_status[i][1] == '3' or sg_status[i][1] == '1' or sg_status[i][1] == '0' and \
(i != 0 and sg_status[i-1][1] != '3' and sg_status[i-1][1] != '1' and sg_status[i-1][1] != '0')) :
continue
else:
start_time_green = sg_status[i][0]
for j in range(i,len(sg_status)):
if not(sg_status[j][1] != '3' and sg_status[j][1] != '1' and sg_status[j][1] != '0' and \
(sg_status[j-1][1] == '3' or sg_status[j-1][1] == '1' or sg_status[j-1][1] == '0')):
continue
else:
end_time_green = sg_status[j][0]
print "start: "+str(start_time_green)
print "end :" + str(end_time_green)
minumum_green = end_time_green - start_time_green
minimum_green_list.append(minumum_green)
break
return str(minimum_green_list)
但是结果显然是错误的,它比正确的打印出更多的开始时间绿色。我怀疑过滤器
if not(sg_status[i][1] == '3' or sg_status[i][1] == '1' or sg_status[i][1] == '0' and \
(i != 0 and sg_status[i-1][1] != '3' and sg_status[i-1][1] != '1' and sg_status[i-1][1] != '0'))
或者,关于这一点的逻辑是不正确的
sg_status =[[[datetime.datetime(2015, 7, 8, 3, 0, 24, 302000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 0, 24, 903000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 0, 27, 600000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 0, 28, 201000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 0, 37, 500000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 0, 38, 101000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 40, 500000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 41, 1000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 50, 600000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 50, 701000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 51, 502000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 55, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 55, 901000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 57, 702000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 1, 58, 703000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '<'],
[datetime.datetime(2015, 7, 8, 3, 2, 1, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'A'],
[datetime.datetime(2015, 7, 8, 3, 2, 2, 701000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'A'],
[datetime.datetime(2015, 7, 8, 3, 2, 3, 702000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 7, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 10, 701000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 11, 802000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 12, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 12, 801000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 13, 702000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 14, 703000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 15, 704000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 16, 705000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 16, 806000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 18, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 20, 701000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 21, 702000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 22, 903000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 23, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 24, 701000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 25, 702000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 26, 703000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 2, 26, 804000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '0'],
[datetime.datetime(2015, 7, 8, 3, 2, 27, 805000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '1'],
[datetime.datetime(2015, 7, 8, 3, 2, 30, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '1'],
[datetime.datetime(2015, 7, 8, 3, 2, 32, 801000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 2, 35, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 3, 51, 400000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 3, 52, 1000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 3, 58, 500000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 3, 59, 101000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 17, 900000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 18, 401000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 24, 800000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 25, 301000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 25, 902000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 26, 603000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 28, 704000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 29, 305000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 35, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 5, 35, 601000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 12, 100000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 13, 1000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 15, 402000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 15, 903000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 17, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 19, 1000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 19, 402000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 23, 800000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 24, 501000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 25, 802000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 26, 303000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 26, 704000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 27, 205000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 27, 906000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 28, 500000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 30, 801000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 31, 302000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 33, 200000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 33, 901000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 37, 402000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 38, 100000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 49, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 54, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 56, 701000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '3'],
[datetime.datetime(2015, 7, 8, 3, 8, 57, 702000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), '<'],
[datetime.datetime(2015, 7, 8, 3, 9, 0, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'A'],
[datetime.datetime(2015, 7, 8, 3, 9, 1, 701000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'A'],
[datetime.datetime(2015, 7, 8, 3, 9, 2, 702000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 9, 6, 700000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 9, 7, 301000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 9, 8, 402000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 9, 9, 203000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],
[datetime.datetime(2015, 7, 8, 3, 9, 9, 704000, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180, name=None)), 'B'],]
sg_status=[[datetime.datetime(2015,7,8,3,0,24302000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,0,24903000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,0,27,600000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,0,28201000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,0,37500000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,0,38101000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,40500000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,41,1000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,50600000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,50701000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,51502000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,55700000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,55901000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,57702000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),'3'],
[datetime.datetime(2015,7,8,3,1,58703000,tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=180,name=None)),”这可以使用单个循环来完成
初始化一个空的绿色\u时间\u列表以存储绿色间隔的时间,绿色\u开=假表示绿色当前未开,绿色\u开始时间为无
如果绿色为on且当前状态不是“0”、“1”、“3”之一,则这是第一个非绿色条目。将绿色设置为off并计算绿色开始和当前条目时间戳之间的时差。将时差添加到绿色时间列表中
否则,如果绿色为off,当前状态为“0”、“1”、“3”之一,则这是第一个“绿色”条目。将绿色设置为on,并将时间戳保存在绿色的\u开始\u时间中
当然,这假设您的数据是按时间顺序排列的
def find_green_times(sg_status):
green_on = False
green_list = []
green_start = None
for s in sg_status:
if not green_on and s[1] in ("0","1","3"):
# Green was not on till now and now a green status is seen
# Save timestamp as green_start time
green_start = s[0]
# Set green is on
green_on = True
elif green_on and s[1] not in ("0", "1", "3"):
# Green was on and a non-green status is seen
# Set green to off
green_on = False
# Compute time difference between time when green was
# started and this timestamp
green_list.append(s[0] - green_start)
# Optionally reset the green time
green_start = None
return green_list, green_on, green_start
然后,对于给定的输入,返回
>>> find_green_times(sg_status)
([datetime.timedelta(0, 94, 401000), datetime.timedelta(0, 390, 898000)], False, None)
你知道吗,在Python中,你可以使用一个单行来打破多行。你可能想考虑使用它。