PyCraft
数据结构

数组常用操作

遍历、查找、翻转,刷题必会

数组常用操作

列表(数组)的三种高频操作:遍历查找翻转。LeetCode 里几乎每题都会用到其中一种或多种。

怎么遍历数组

按元素遍历

只关心值、不关心下标时,用 for x in nums 最简洁。

加载代码编辑器中…

按下标遍历

需要下标时用 range(len(nums)),或更推荐的 enumerate

加载代码编辑器中…

倒序遍历

从后往前:用 reversed(range(len(nums))) 或切片下标。

加载代码编辑器中…

双指针遍历

两端的下标 left, right 往中间走,常用于「反转、两数之和、判断回文」等。

加载代码编辑器中…

怎么查找数组

是否存在:in

判断某个值是否在列表中,用 in(线性扫描,O(n))。

加载代码编辑器中…

找下标:index()

第一个等于目标值的下标;找不到会抛 ValueError

加载代码编辑器中…

找所有下标

需要「所有等于 x 的下标」时,用 enumerate 遍历一遍。

加载代码编辑器中…

有序数组查找:二分

数组已排序时,用二分查找可以 O(log n)。Python 标准库有 bisect,详见 二分与 bisect

加载代码编辑器中…

怎么翻转数组

得到新列表:切片 [::-1]

不修改原列表,得到反转后的新列表,最常用。

加载代码编辑器中…

原地反转:reverse()

直接改原列表,无返回值(返回 None)。

加载代码编辑器中…

双指针原地反转

面试常考「手写原地反转」:用左右指针交换元素。

加载代码编辑器中…

小结

需求写法是否改原列表
要新列表nums[::-1]
原地反转nums.reverse()
手写原地反转双指针交换