Python实现按初始列表值重复连续数字生成目标列表
解决Python列表生成问题:按指定次数重复连续数字
嘿,别担心,这个需求其实很好实现!我来一步步给你讲清楚怎么做。
先确认下你的需求:给定初始列表initialList,我们要生成一个目标列表,其中第i个数字(从0开始计数)会重复initialList[i]次,对吧?比如你给的例子:
- initialList[0] = 1 → 数字0重复1次 → [0]
- initialList[1] = 2 → 数字1重复2次 → [1,1]
- initialList[2] = 3 → 数字2重复3次 → [2,2,2]
- initialList[3] =5 → 数字3重复5次 → [3,3,3,3,3]
把这些部分拼起来就是你要的targetList了。
接下来给你几种实现方式,你可以根据自己的习惯选:
方法1:基础循环(适合新手理解)
用最直观的循环来构建列表,逻辑清晰,容易看懂:
initialList = [1,2,3,5] targetList = [] for i in range(len(initialList)): # 把数字i重复initialList[i]次,添加到目标列表 targetList.extend([i]*initialList[i]) print(targetList) # 输出: [0,1,1,2,2,2,3,3,3,3,3]
这里[i]*initialList[i]会生成一个包含initialList[i]个i的子列表,用extend()把它合并到目标列表里——别用append()哦,它会把整个子列表当成一个元素加进去。
方法2:列表推导式(更简洁)
Python的列表推导式可以一行搞定,写法更优雅:
initialList = [1,2,3,5] targetList = [i for i, count in enumerate(initialList) for _ in range(count)] print(targetList)
enumerate(initialList)会同时拿到索引i和对应的重复次数count,内层循环负责重复count次生成i,最后自动把所有结果收集成列表。
方法3:用itertools.repeat(高效处理大列表)
如果你的初始列表数据量很大,用itertools.repeat会更高效——它不会提前生成所有重复的子列表,而是按需生成,内存占用更低:
import itertools initialList = [1,2,3,5] targetList = [] for i, count in enumerate(initialList): targetList.extend(itertools.repeat(i, count)) print(targetList)
你可以试试这几种方法,都能得到你想要的结果。如果还有其他疑问,随时问哦!
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

