Skip to main content
 首页 » 编程设计

python之从断点列表中完全枚举范围

2025年05月04日37Renyi-Fan

这是一个有点像 python 101 的问题,但我想不出一种 pythonic 方式来枚举这些断点之间所有整数的断点列表。

假设我有:

breaks = [4, 7, 13, 15, 18] 

我要

enumerated = [[4,5,6],[7,8,9,10,11,12],[13,14],[15,16,17],[18]] 

(我的实际用例涉及以年为单位的断点;我想要每个范围内的所有年份)。 我可以用一个计数器遍历 breaks,为每个间隔创建一个 range 并将它存储在一个列表中,但我怀疑对于这种类型有一个简单的单行代码枚举。效率是一个问题,因为我要处理数百万条记录。

请您参考如下方法:

你可以使用zip

>>> enumerated = [range(start, end) for start,end in zip(breaks, breaks[1:])] + [[breaks[-1]]] 
>>> enumerated 
[[4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14], [15, 16, 17], [18]] 

使用自身偏移量为 1 的列表压缩 (zip(breaks, breaks[1:]) 是获取所有对的已知“技巧”。这会删除最后一个所以我手动添加了它。