Python-识别列表中的连续数字组
我想识别列表中的连续数字组,以便:
myfunc([2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20])
返回值:
[(2,5), (12,17), 20]
并且想知道实现此目的的最佳方法是什么(特别是如果Python内置了某些东西)。
编辑:注意,我最初忘记提及个人数字应作为个人数字而不是范围返回。
回答:
more_itertools.consecutive_groups
是在4.0版中添加的。
演示版
import more_itertools as mititerable = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
[list(group) for group in mit.consecutive_groups(iterable)]
# [[2, 3, 4, 5], [12, 13, 14, 15, 16, 17], [20]]
应用此工具,我们将生成一个生成器函数来查找连续数字的范围。
def find_ranges(iterable): """Yield range of consecutive numbers."""
for group in mit.consecutive_groups(iterable):
group = list(group)
if len(group) == 1:
yield group[0]
else:
yield group[0], group[-1]
iterable = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20]
list(find_ranges(iterable))
# [(2, 5), (12, 17), 20]
所述源执行模拟一个经典配方(由@Nadia Alramli所证明)。
注意:more_itertools是可通过安装的第三方软件包pip install more_itertools。
以上是 Python-识别列表中的连续数字组 的全部内容, 来源链接: utcz.com/qa/434252.html