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

如何更高效生成指定数值序列的Python列表?

优化列表生成代码的方案

问题描述

需要生成列表:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 200, 201, 202, 203, 204, 205, 206, 207, 208, 300, 301, 302, 303, 304, 305, 306, 307, 400, 401, 402, 403, 404, 405, 406, 500, 501, 502, 503, 504, 505, 600, 601, 602, 603, 604, 700, 701, 702, 703, 800, 801, 802,0,900,901,1000]

现有实现代码:

ma=[900,901,1000,0]
ch=list(list(range(1,11))+list(range(100,110))+list(range(200,209))+list(range(300,308))+list(range(400,407))+list(range(500,506))+list(range(600,605))+list(range(700,704))+list(range(800,803))+ma)

更优实现方式

可以通过提取区间规则的方式简化代码,提升可读性和可维护性:

方案1:循环+extend(直观易读)

# 定义每个区间的起始数字和元素个数
ranges_spec = [
    (1, 10),    # 1~10(共10个元素)
    (100, 10),  # 100~109(共10个元素)
    (200, 9),   # 200~208(共9个元素)
    (300, 8),   # 300~307(共8个元素)
    (400, 7),   # 400~406(共7个元素)
    (500, 6),   # 500~505(共6个元素)
    (600, 5),   # 600~604(共5个元素)
    (700, 4),   # 700~703(共4个元素)
    (800, 3)    # 800~802(共3个元素)
]

ch = []
for start, count in ranges_spec:
    ch.extend(range(start, start + count))

# 添加末尾的特殊元素
ch += [900, 901, 1000, 0]

方案2:列表推导式(简洁紧凑)

ranges_spec = [(1,10), (100,10), (200,9), (300,8), (400,7), (500,6), (600,5), (700,4), (800,3)]
ch = [num for start, count in ranges_spec for num in range(start, start + count)] + [900,901,1000,0]

优化优势

  1. 可读性更强:把每个区间的规则明确列在元组里,无需拆解长长的range拼接链就能理解每个部分对应哪些数字
  2. 可维护性更好:如果需要调整某个区间的起始数或长度,直接修改ranges_spec里的元组即可,不用在冗长的代码中定位
  3. 性能更优:原代码多次使用+拼接列表,每次拼接都会创建新列表并复制元素;而extend或列表推导式的方式是直接在原列表中添加元素,减少了不必要的内存开销

内容的提问来源于stack exchange,提问作者Adarsh vijayvargiya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:10:49