识别连续的数字组
在Python中,识别列表中的连续数字组可以使用内置的itertools.groupby( ) 功能。它的工作原理如下:
itertools.groupby() 函数
groupby() 函数根据关键函数对可迭代对象的元素进行分组。在本例中,我们定义一个关键函数来计算元素的索引与其值之间的差。连续的数字将具有相同的键,从而进行分组。
代码实现:
考虑示例列表 [2, 3, 4, 5, 12, 13 、14、15、16、17、20]。下面的代码利用 groupby() 来识别连续的数字组:
from itertools import groupby from operator import itemgetter data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20] ranges = [] for k, g in groupby(enumerate(data), lambda (i, x): i - x): group = map(itemgetter(1), g) if len(group) > 1: ranges.append(tuple(group[0], group[-1])) else: ranges.append(group[0])
理解关键函数:
lambda 函数(lambda (i, x): i - x) 计算元素索引 (i) 和值 (x) 之间的差。这种差异使我们能够将连续的数字分组在一起。例如,对于数字 2,差值为 0,对于数字 12,差值为 10。
处理分组元素:
对于每个key(差异),groupby() 生成一个包含相应分组元素的生成器对象 (g)。我们使用 map() 和 itemgetter() 将此生成器转换为列表,以仅提取元素值。
过滤和附加结果:
我们检查分组的元素判断是否大于1,表示连续的数字。如果是这样,我们将组中第一个和最后一个元素的元组附加到范围列表中。对于单个数字,我们附加数字本身。
输出:
范围列表将包含以下连续数字组:
[(2, 5), (12, 17), 20]
以上是如何识别Python列表中的连续数字组?的详细内容。更多信息请关注PHP中文网其他相关文章!