如何根据元素的值拆分列表

萨布扎利耶夫·绍汉书

我有一个值列表

lst = [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 185, 186, 187, 188, 189, 190, 191, 192, 193, 195, 196, 197, 198, 199, 221, 222, 223, 224, 225, 226, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 309, 310, 311, 312, 313, 314, 315, 316, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 401, 402, 403, 404, 405, 406, 407, 408, 439, 440]

如果您仔细查看列表,您会看到值在增加,然后有一个很大的跳跃,然后值再次开始增加。

我怎么能分开所以最后我可以拥有

[[75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88], [118, 119, 120, 121, 122, 123, 124, 125, 126, 127], [155, 156, 157, 158, 159, 160, 161, 162, 163, 164]...[439, 440]]
莫兹韦

这是一个解决方案itertools我用作保持连续数字的条件(感谢@KarlKnechtel)。

from itertools import groupby
diff = [item - i for i, item in enumerate(lst)]
[[x[1] for x in g] for i,g in groupby((zip(diff,lst)), lambda x: x[0])]

输出:

[[75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88],
 [118, 119, 120, 121, 122, 123, 124, 125, 126, 127],
 [155, 156, 157, 158, 159, 160, 161, 162, 163, 164],
 [185, 186, 187, 188, 189, 190, 191, 192, 193],
 [195, 196, 197, 198, 199],
 [221, 222, 223, 224, 225, 226],
 [273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283],
 [309, 310, 311, 312, 313, 314, 315, 316],
 [371, 372, 373, 374, 375, 376, 377, 378, 379, 380],
 [401, 402, 403, 404, 405, 406, 407, 408],
 [439, 440]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章