Python中是否有简便方法将含连续整数的列表转为格式化字符串?
Python 简洁实现整数列表转紧凑范围字符串
嘿,这个需求我太熟悉了!你自己写遍历逻辑当然可行,但Python的标准库其实已经提供了更简洁的解决方案——用itertools.groupby就能轻松搞定,不用手动写一堆判断连续值的代码~
核心思路
itertools.groupby可以帮我们把连续的整数归为一组。关键的技巧是:连续整数和它们的索引的差值是固定的。比如列表里的5,6,7,8,9,10,对应的索引是1到6,计算索引-数值的话,结果都是-4,这样groupby就会把它们分到同一个组里。
完整代码实现
from itertools import groupby def compress_integer_list(num_list): compressed = [] # 用enumerate给每个数值带上索引,按索引与数值的差值分组 for _, group in groupby(enumerate(num_list), lambda x: x[0] - x[1]): group_items = list(group) start_num = group_items[0][1] end_num = group_items[-1][1] # 判断是单个数值还是连续范围 if start_num == end_num: compressed.append(f"{start_num}") else: compressed.append(f"{start_num}-{end_num}") return ",".join(compressed)
测试一下
用你给出的示例列表测试:
test_list = [2, 5, 6, 7, 8, 9, 10, 15, 18, 19, 20] print(compress_integer_list(test_list)) # 输出结果:2,5-10,15,18-20
这个方法的好处是代码简洁、可读性强,而且依赖的是Python内置标准库,不需要额外安装第三方包。如果你的列表特别长,这个实现的效率也很不错,因为groupby是迭代式处理的,不会占用额外的大量内存~
内容的提问来源于stack exchange,提问作者Christopher G.
相关产品推荐
相关产品推荐

