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

为何Python按步长2将数组转元组时输出[(1,2),(3,3)]而非[(1,2),(3,4)]?

问题原因解析

你的代码出现意外输出的核心原因是:enumerate 遍历的是切片后的子列表,而非原列表,导致 idx 是子列表的索引,而非原列表的索引。

我们一步步拆解代码执行过程:

  1. 切片操作生成子列表:els[::2] 会从原列表 [1,2,3,4] 中按步长2取元素,得到新的子列表 [1,3]。这个子列表的元素对应原列表的索引0和2,但它本身的索引是0和1。

  2. enumerate 遍历子列表:enumerate(els[::2]) 会返回 (0,1) 和 (1,3) 两组数据。这里的 idx 是子列表的索引,不是原列表的索引。

  3. 错误的原列表索引访问:

    • 第一次循环:idx=0,els[idx+1] 即 els[1],对应原列表的元素2,结果正确。
    • 第二次循环:idx=1,els[idx+1] 即 els[2],对应原列表的元素3,而非你预期的原列表索引3的元素4。

简单来说,你误以为 idx 是原列表中元素的位置,但实际上它是切片后子列表的位置,所以用它来计算原列表的索引时,自然无法定位到正确的下一个元素。

内容的提问来源于stack exchange,提问作者Olivier Pons

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:41:02