这是一个关于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并将其存储在列表中,但是我怀疑这种枚举有一个简单的一线式。由于我要处理数百万条记录,因此效率是一个问题。

最佳答案

您可以使用拉链

>>> 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]]


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

关于python - 从断点列表中完全枚举范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35636950/

10-10 23:05