Skip to main content
 首页 » 编程设计

python之python 中的间隔

2025年05月04日10cyq1162

我已经对 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)]] 

请您参考如下方法:

你可以试试

a = list(zip(a[:-1], a[1:])) 
a.append((a[-1], a[0])]) 

这为您提供了一个元组列表。如果你想要一个列表列表,就这样做

>>> a = [list(i) for i in zip(a[:-1], a[1:])] 
>>> a.append([a[-1], a[0]]) 

(编辑版本将 1. [a[-1],a[0]] 排除在列表理解之外,以及 2. zip 不返回列表的事实在 Python 3+ 中)

另一种可能性是将第一个值附加到列表中:

>>> tmp = a + a[0] 
>>> list(zip(tmp[:,-1], tmp[1:])) 

可以说它创建了一个临时列表。您可以改为执行 aa.append(a[0]),但随后您会修改您的初始列表,这可能是一个问题。