zip
停在最短参数的末尾。myList[1:]
总是比myList
(前提是列表不为空),所以你得到的最后一对zip
is x,y = 11,333
:
>>> myList =[11,12,93,14,15,45,56,67,78,11,333]
>>> pairs = zip(myList, myList[1:])
>>> list(pairs)[-1]
(11, 333)
但你只分配final
and z
到当前值x
,它永远不可能是最后一个元素。您可以在列表末尾添加一个无法触发条件的幻像元素:您正在使用混合的较大和较小比较,因此您最好的选择是特殊值“不是数字”float('nan')
,它既不大于也不小于任何数字(所有比较都返回False
)。对于成对的特殊情况,您可以像这样放置虚拟元素,因为已知第二个参数恰好比较长的元素短一个元素:
>>> pairs = zip(myList, myList[1:]+[float('nan')])
>>> list(pairs)[-1]
(333, nan)
但对于更通用的解决方案,您将需要使用zip_longest
来自 itertools,它有效地填充较短参数的末尾,如下所示,直到它们达到最长参数的长度:
>>> pairs = it.zip_longest(myList, myList[1:], fillvalue=float('nan'))
>>> list(pairs)[-1]
(333, nan)