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

如何构造第i个元素恰好出现i次的Python列表

问题解答

错误原因说明

  • 首次写法问题:你使用的单层列表推导仅遍历range(n)的每个元素1次,自然只能得到每个数字仅出现1次的序列。另外需要注意range(n)默认从0开始计数,如果直接使用会生成包含0的错误结果,需要指定起始值为1。
  • 第二次写法问题:[x] * x会为每个数字x生成独立的子列表,extend方法会将每个子列表作为独立元素插入总列表,最终就会得到嵌套列表的不符合预期结果。

正确实现方案

方案1:双层列表推导(最简洁)

直接在列表推导中加第二层循环控制重复次数,自动生成平铺结构:

n = 5 # 可替换为你需要的数值
rules = [x for x in range(1, n+1) for _ in range(x)]

运行后rules结果为[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5],完全符合需求。

方案2:嵌套列表扁平化(适配你第二次的写法逻辑)

如果你想要保留生成子列表的逻辑,可以用itertools.chain将嵌套列表扁平化:

from itertools import chain
n = 6
rules = list(chain.from_iterable([x] * x for x in range(1, n+1)))

运行后rules结果为[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6]。

内容的提问来源于stack exchange,提问作者ilya jung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:36:04