如何更高效生成指定数值序列的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]
优化优势
- 可读性更强:把每个区间的规则明确列在元组里,无需拆解长长的range拼接链就能理解每个部分对应哪些数字
- 可维护性更好:如果需要调整某个区间的起始数或长度,直接修改
ranges_spec里的元组即可,不用在冗长的代码中定位 - 性能更优:原代码多次使用
+拼接列表,每次拼接都会创建新列表并复制元素;而extend或列表推导式的方式是直接在原列表中添加元素,减少了不必要的内存开销
内容的提问来源于stack exchange,提问作者Adarsh vijayvargiya
相关产品推荐
相关产品推荐

