You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:10:53