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

Python数组重排代码中len(A)-1的含义是什么?

问题解答:数组重排代码中len(A)-1的含义

这段代码出自《Python编程面试元素》第37页,作用是对整数数组重新排序,使偶数排在数组前面。

def even_odd(A):
    next_even, next_odd = 0, len(A) - 1
    while next_even < next_odd:
        if A[next_even] % 2 == 0:
            next_even += 1
        else:
            A[next_even], A[next_odd] = A[next_odd], A[next_even]
            next_odd -= 1

核心问题

代码中的len(A)-1里的“-1”有什么作用及含义?


嘿,这个问题其实和Python列表的索引规则直接相关,我给你掰扯清楚:

  • 含义:获取数组最后一个元素的合法索引
    Python里的列表(数组)是从0开始索引的——比如一个长度为5的数组,元素的索引依次是0、1、2、3、4。len(A)会返回数组的总长度,所以len(A)-1就是数组最后一个元素的索引,这是访问数组末尾元素的标准写法。

  • 作用:为双指针逻辑提供合法的起始位置
    这段代码用了双指针法来排序:

    • next_even从数组开头(索引0)出发,负责找需要交换的奇数;
    • next_odd从数组末尾出发,负责找可以交换的偶数。
      如果直接用len(A)作为next_odd的初始值,当你访问A[next_odd]时,就会触发IndexError(索引越界),因为数组根本没有这个位置的元素。而len(A)-1刚好指向最后一个元素,是完全合法的起始位置,能让双指针从数组两端开始往中间逼近,完成奇偶交换的逻辑。

举个小例子:假设数组A = [1,3,2,4],len(A)是4,len(A)-1就是3,对应最后一个元素4的索引。初始时next_odd指向4,当next_even在0位置找到奇数1,就和3位置的4交换,数组变成[4,3,2,1],然后next_odd减到2,继续循环直到指针相遇。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:54:24