我已经对 datetime.time 列表进行了排序,并希望创建类似的间隔。如果我有
a = [datetime.time(0,0), datetime.time(8,0), datetime.time(13,0), datetime.time(17,0)]
那么结果应该是这样的:
c = [[datetime.time(0,0),datetime.time(8,0)], [datetime.time(8,0),datetime.time(13,0)],
[datetime.time(13,0),datetime.time(17,0)], [datetime.time(17,0),datetime.time(0,0)]]
这可以使用简单的循环来实现,但是是否存在更好的解决方案?
使用循环:
>>> a=[datetime.time(0, 0), datetime.time(3, 0), datetime.time(8, 0), datetime.time(11, 0)]
>>>
>>> r = []
>>>
>>> for i in range(0,len(a)):
... if i+1 < len(a):
... r.append([a[i],a[i+1]])
... else:
... r.append([a[i],a[0]])
...
>>> r
[[datetime.time(0, 0), datetime.time(3, 0)], [datetime.time(3, 0), datetime.time(8, 0)], [datetime.time(8, 0), datetime.time(11, 0)], [datetime.time(11, 0), datetime.time(0, 0)]]
>>>
如果我希望结果是,可以改变什么
[[datetime.time(0, 0), datetime.time(2, 59, 59)], [datetime.time(3, 0), datetime.time(7, 59, 59)], [datetime.time(8, 0), datetime.time(10, 59, 59)], [datetime.time(11, 0), datetime.time(23, 59, 59)]]
原文由 sharafjaffri 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以试试
这给了你一个元组列表。如果你想要一个列表列表,就这样做
( _编辑版本采用 1.
[a[-1],a[0]]
超出列表理解和 2. zip 在 Python 3+ 中不返回列表的事实_)另一种可能性是将第一个值附加到列表中:
可以说它创建了一个临时列表。您可以改为执行
a.append(a[0])
但随后您将修改您的初始列表,这可能是一个问题。