擅长:python、mysql、java
<p>还有一个选项<sup>1</sup>作为一行:但是使用<strong>非常不通俗的表达式(imho),这样就不必在单独的步骤中附加最后一对和第一对:</p>
<pre><code>>>> [list(i) for i in zip(a, a[1:]+[a[0]])]
[[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)]]
</code></pre>
<p><sup>1</sup><code>zip</code>方法<a href="https://stackoverflow.com/a/12388054/1431750">inspired by Pierre-GM's solution above</a>。</p>
<p>仅供参考,<strong>我更喜欢<a href="https://stackoverflow.com/a/12388105/1431750">my initial answer</a>或皮埃尔的</strong>而不是这个。</p>
<hr/>
<p>编辑/更新问题的第二部分:在一个表达式中也执行时间增量(但我看不出为什么不应该将其拆分成不同的语句…)</p>
<pre><code>>>> [[i, (datetime.datetime(101, 1, 1, j.hour, j.minute, j.second) -
... datetime.timedelta(seconds=1)
... ).time()
... ] for i,j in zip(a, a[1:]+[a[0]])
... ]
[[datetime.time(0, 0), datetime.time(7, 59, 59)],
[datetime.time(8, 0), datetime.time(12, 59, 59)],
[datetime.time(13, 0), datetime.time(16, 59, 59)],
[datetime.time(17, 0), datetime.time(23, 59, 59)]]
</code></pre>