纯Python如何优化生成数字重复自身次数的列表的实现方法
原生Python实现方案
方案1:嵌套列表推导式(最简洁推荐)
这是可读性和简洁度平衡最好的实现,只用原生语法,无需额外中间变量:
def repetition(n): return [i for i in range(1, n+1) for _ in range(i)]
直接调用repetition(5)就能得到你要的[1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]结果。
方案2:单循环直接追加(适合新手理解)
如果你觉得列表推导式的双重循环不好理解,可以去掉你原来生成子列表+展开的两步操作,直接往最终列表里追加元素,比你原有写法节省内存和时间:
def repetition(n): flat_list = [] for i in range(1, n+1): # 直接追加i次i,不需要中间存子列表 for _ in range(i): flat_list.append(i) return flat_list
方案3:sum拼接列表(短代码写法)
如果只是写短小的脚本,也可以用sum方法直接拼接生成的子列表:
def repetition(n): return sum([[i]*i for i in range(1, n+1)], [])
注意:这个方案在n非常大的时候性能会弱于前两个,因为sum拼接列表的时间复杂度更高,小数据量场景下可以放心使用。
对你原有写法的优化建议
你原来的代码里sequence.insert(i, [i]*i)完全可以替换成sequence.append([i]*i),因为你是按顺序从1到n插入子列表的,append不需要计算插入位置,执行效率更高。
内容的提问来源于stack exchange,提问作者user17153595
相关产品推荐
相关产品推荐

