Python合并相邻起止元组是否有标准库或Numpy相关操作?
Python合并相邻区间的实现方案
需求说明
我们需要对按区间起始值排序的元组列表,合并首尾相接或数值相邻的区间,示例效果如下:
输入示例:
my_array = [(1, 3), (3, 4), (4, 5), (5, 7), (10, 12), (12, 17), (21, 24)]
期望输出:
[(1, 7), (10, 17), (21, 24)]
如果输入列表没有提前排序,可先通过sorted(my_array, key=lambda x: x[0])完成排序再处理
目前Python和Numpy的标准库没有直接提供对应内置函数,你可以使用以下自定义函数实现该功能:
自定义实现代码
整数区间专用版本
import re def magic_function(mylist): # 将列表转换为整数区间字符串格式 intspan = ','.join([f'{int(a)}-{int(b)}' for (a,b) in mylist]) # 合并相邻区间 intspan = re.sub(r'\-(\d+)\,\1', '', intspan) # 转换回元组列表格式 return [tuple(map(int, _.split('-'))) for _ in intspan.split(',')]
适配浮点数的通用版本
import re def magic_function(mylist): # 将列表转换为浮点数区间字符串格式 floatspan = ','.join([f'{float(a)}-{float(b)}' for (a,b) in mylist]) # 合并相邻区间 floatspan = re.sub(r'\-(\d+\.?\d+?)+\,\1', '', floatspan) # 转换回元组列表格式 return [tuple(map(float, _.split('-'))) for _ in floatspan.split(',')]
内容的提问来源于stack exchange,提问作者Aswin Sivaraman
相关产品推荐
相关产品推荐

