如何高效实现多数值范围与字符串的拼接?
更高效的实现方案
你的需求是生成包含三个数值范围的Class_xxx格式字符串列表,原代码通过三次列表推导式相加实现,确实存在可以优化的空间,主要体现在减少中间内存开销和简化逻辑上:
优化方向1:合并区间遍历,避免创建多个中间列表
原代码会生成三个独立的列表再合并,额外占用内存存储中间结果。可以先定义所有数值区间,通过嵌套循环一次性生成最终列表:
# 注意:range的结束值要+1才能覆盖需求的上限(比如1-20对应range(1,21)) ranges = [(1, 21), (2041, 2056), (5001, 5005)] result = [f"Class_{i}" for start, end in ranges for i in range(start, end)]
同时用f-string替代"Class_"+str(i),这是Python中更高效的字符串格式化方式,代码也更简洁。
优化方向2:用itertools.chain合并迭代器(适合大数据量场景)
如果数值范围很大,使用itertools.chain可以惰性合并多个range对象,不需要提前创建任何中间列表,进一步降低内存消耗:
from itertools import chain result = [f"Class_{i}" for i in chain( range(1, 21), range(2041, 2056), range(5001, 5005) )]
注意点
原代码中的range(1,20)实际生成的是1-19的数值,若要完全覆盖需求的1-20,需要将range的结束值设为21,同理2041-2055对应range(2041,2056),5001-5004对应range(5001,5005)。
内容的提问来源于stack exchange,提问作者Roq
相关产品推荐
相关产品推荐

