如何在Python中将带字母前缀的列表转换为数值字符串范围
实现带字母前缀的有序列表转范围合并字符串
核心思路
先拆分每个元素的字母前缀和数字部分,对数字进行连续区间合并后,再重新拼接成带前缀的范围格式。
代码实现
def merge_ranges(lst): if not lst: return "" # 提取公共前缀(假设所有元素前缀一致) prefix = ''.join([c for c in lst[0] if not c.isdigit()]) # 提取所有数字部分并转为整数 nums = [int(''.join([c for c in s if c.isdigit()])) for s in lst] ranges = [] start = nums[0] end = nums[0] for num in nums[1:]: if num == end + 1: end = num else: ranges.append((start, end)) start = num end = num # 添加最后一个区间 ranges.append((start, end)) # 转换为目标格式字符串 result_parts = [] for s, e in ranges: if s == e: result_parts.append(f"{prefix}{s}") else: result_parts.append(f"{prefix}{s} - {prefix}{e}") return ", ".join(result_parts) # 测试示例 list_input = ['X70', 'X71', 'X72', 'X73', 'X75', 'X76', 'X77', 'X79', 'X80'] string_output = merge_ranges(list_input) print(f"string = \"{string_output}\"")
代码说明
- 提取前缀:通过筛选第一个元素的非数字字符,得到公共前缀(比如示例中的
X)。 - 数字转换:把每个元素的数字部分转为整数,方便判断连续性。
- 合并区间:遍历数字列表,将连续的数字归为一个区间,记录每个区间的起始和结束值。
- 格式拼接:根据区间的起始和结束是否相同,生成对应的单元素或范围字符串,最后用
,连接所有部分。
测试结果
运行代码后会输出:
string = "X70 - X73, X75 - X77, X79, X80"
内容的提问来源于stack exchange,提问作者teddyog
相关产品推荐
相关产品推荐

