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 mit

iterable = [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

回到顶部