尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Python列表操作宝典!5大核心技能带你绕过那些年踩过的坑
你有没有过这样的经历遍历列表时想删除某些元素结果不是漏删就是报错兴致勃勃地用list1 list2复制列表改一个却把另一个也改了费半天劲写的循环别人一行列表推导式就搞定了列表作为 Python 中最灵活的数据结构看似简单实则处处是陷阱。今天这篇我将带你系统掌握列表的定义、索引、切片、遍历、常用方法五大核心技能让你彻底告别基础不牢的尴尬代码干净又高效 目录列表的定义索引精准定位元素切片灵活的截取艺术遍历列表的正确姿势常用方法大全与实战总结与思考1. 列表的定义列表是 Python 中最常用的可变序列用方括号[]包裹元素间用逗号分隔。元素类型可以不同甚至能嵌套列表。python# 空列表 empty [] # 同类型 nums [1, 2, 3, 4, 5] # 混合类型 mixed [1, hello, 3.14, True] # 嵌套列表二维 matrix [[1, 2], [3, 4]]创建列表的几种方式字面量[1, 2, 3]list()构造函数list(abc)→[a, b, c]也可将元组、集合等转为列表列表推导式[x**2 for x in range(5)]→[0, 1, 4, 9, 16]⚠️可变意味着你可以原地修改元素、增删元素这与字符串的不可变截然不同。2. 索引精准定位元素列表索引规则与字符串完全一致正向从0开始反向从-1开始。列表元素可以被索引访问并直接修改这是它与字符串的最大区别。pythonfruits [苹果, 香蕉, 橙子, 葡萄] print(fruits[0]) # 苹果 print(fruits[-1]) # 葡萄 # 通过索引修改元素 fruits[1] 芒果 print(fruits) # [苹果, 芒果, 橙子, 葡萄]正负索引对照元素苹果香蕉→芒果橙子葡萄正索引0123负索引-4-3-2-1 索引越界同样会抛出IndexError访问前可用len()或捕获异常。修改不存在的索引也会报错。嵌套列表的索引pythonmatrix [[1, 2], [3, 4]] print(matrix[0][1]) # 2先取第一行再取第二列3. 切片灵活的截取艺术列表切片与字符串切片语法完全相同[start:stop:step]左闭右开。切片生成的是新列表原列表不受影响。pythonnums [0, 1, 2, 3, 4, 5] print(nums[1:4]) # [1, 2, 3] 索引1到3 print(nums[:3]) # [0, 1, 2] print(nums[2:]) # [2, 3, 4, 5] print(nums[::2]) # [0, 2, 4] 步长为2 print(nums[::-1]) # [5, 4, 3, 2, 1, 0] 反转列表切片还能用于批量赋值列表特有的高级操作pythonnums[1:3] [10, 20] # 将索引1、2替换为10和20 print(nums) # [0, 10, 20, 3, 4, 5] nums[1:3] [] # 删除这些元素 print(nums) # [0, 3, 4, 5]注意nums是列表切片赋值必须用可迭代对象右边元素个数不必与切片长度相等这相当于替换一段区间。浅拷贝陷阱new_list old_list[:]是常用的浅拷贝方式等价于old_list.copy()。但如果列表中包含可变对象如子列表拷贝的只是引用修改子对象会相互影响。此时需要copy.deepcopy。4. 遍历列表的正确姿势4.1 直接遍历元素最常用pythonfor fruit in [苹果, 香蕉, 橙子]: print(fruit)4.2 需要索引时用range(len())或enumeratepythonfruits [苹果, 香蕉, 橙子] # 方法一通过索引 for i in range(len(fruits)): print(f第{i}个水果是{fruits[i]}) # 方法二enumerate更 Pythonic for idx, fruit in enumerate(fruits): print(idx, fruit)4.3 遍历时想删除元素小心雷区错误示范pythonnums [1, 2, 3, 4, 5] for n in nums: if n % 2 0: nums.remove(n) # 会导致遍历跳过元素 print(nums) # [1, 3, 5] 实际可能是 [1, 3, 5] 这次碰巧但复杂情况容易出错原因删除元素后列表变短索引前移循环的内部计数器却继续后移导致漏检。推荐做法使用列表推导式创建新列表或者用filter()或者倒序遍历删除。python# 安全删除保留奇数 nums [1, 2, 3, 4, 5] nums [n for n in nums if n % 2 ! 0] # 或者 nums[:] [n for n in nums if n % 2 ! 0] # 原地修改原列表引用5. 常用方法大全与实战列表方法极其丰富按功能分类整理如下建议收藏作为速查表。➕ 增加元素方法说明示例append(x)尾部追加一个元素nums.append(6)extend(iterable)尾部追加多个元素扩展列表nums.extend([7,8])insert(i, x)在指定索引前插入元素nums.insert(0, 0)pythona [1,2] a.append(3) # [1,2,3] a.extend([4,5]) # [1,2,3,4,5] a.insert(0, 0) # [0,1,2,3,4,5]➖ 删除元素方法说明remove(x)删除第一个值为 x 的元素不存在则报错pop([i])删除并返回索引 i 处的元素默认删除最后一个clear()清空列表pythona [1,2,3,2] a.remove(2) # [1,3,2] 只删第一个2 a.pop() # 返回2a变为[1,3] a.clear() # [] 查找与统计方法说明index(x, start, end)返回首个值为 x 的索引不存在则 ValueErrorcount(x)统计 x 出现的次数pythona [1,2,3,2] a.index(2) # 1 a.count(2) # 2 排序与反转方法说明sort(keyNone, reverseFalse)原地排序默认升序可自定义 key 函数reverse()原地反转列表pythona [3,1,2] a.sort() # [1,2,3] a.sort(reverseTrue) # [3,2,1] b sorted(a) # 返回新列表a 不变 a.reverse() # 原地反转sort()是列表方法sorted()适用于任何可迭代对象。 列表复制copy()浅拷贝等价于a[:]list(a)也是浅拷贝深拷贝需用import copy→copy.deepcopy(a) 列表推导式Pythonic 的灵魂python# 基本语法[表达式 for 变量 in 可迭代对象 if 条件] squares [x**2 for x in range(10) if x % 2 0] # 偶数的平方 # 带嵌套循环 pairs [(x, y) for x in [1,2] for y in [a,b]] 其他实用操作len(a)元素个数min(a)/max(a)/sum(a)需要元素可比较/数字in/not in成员检查2 in a拼接a b产生新列表*重复a * 3重复元素a * n浅拷贝同样适用于嵌套列表[[]] * 3会得到三个指向同一个子列表的引用修改一个会影响所有。 总结与思考列表是可变序列支持原地修改、切片赋值等操作是 Python 中使用频率最高的容器之一。索引和切片语法与字符串完全一致但列表可以通过索引直接修改元素这是二者的核心区别。遍历时不要直接增删元素可用列表推导式、filter()或倒序操作避免难以察觉的逻辑错误。浅拷贝与深拷贝是新手重灾区a b只是引用传递a b[:]或a b.copy()是一层浅拷贝若列表中含可变对象务必使用deepcopy。性能建议频繁在头部插入删除insert(0, item)/pop(0)效率低下考虑collections.deque。需要大量成员检查in时用集合更高效。优先使用列表推导式而非map/filter lambda可读性更佳。方法链列表方法多数返回None如sort、append不可链式调用请注意区分返回新列表的操作如sorted、。列表是 Python 的“瑞士军刀”学透它你的数据处理能力会提升一个台阶。希望这份手册能成为你日常开发的案边书。如果觉得有用不妨一键三连转发给身边还在被列表坑的小伙伴评论区等你聊聊那些年你踩过的列表坑~
RELATED

相关推荐

从 Prompt 开始的 AI 之旅

从 Prompt 开始的 AI 之旅

AI 时代,那些你应该了解的 AI 黑话 当下 AI 领域最流行、却又最常被误解的词,那一定非 prompt 莫属。 现在我们在逛技术论坛,技术博客,很多文章都在写什么 LLM、Prompt、RAG 的内容,虽然文章读起来还是很容易理解的&a…

📅 2026/9/12 17:47:24
Flutter与Android原生控件集成开发指南

Flutter与Android原生控件集成开发指南

1. Flutter与Android原生控件集成的核心价值在跨平台开发领域,Flutter以其高效的渲染引擎和一致的UI表现脱颖而出。但当我们遇到需要复用现有Android原生控件或访问平台特有功能时,原生插件机制就成为打通两端的关键桥梁。这种混合开发模式既能保留Flutt…

📅 2026/8/23 17:16:49
Z检验与T检验区别:总体方差是否已知才是关键

Z检验与T检验区别:总体方差是否已知才是关键

统计学里最让人坐立不安的,不是公式推导,也不是分布函数,而是那几个长得差不多、用起来又总出错的字母:Z、T、P。我带过十几期数据分析实战训练营,每期开课前三天,总有学员在群里发截图:“老师&…

📅 2026/9/8 15:22:32
MORE NEWS

更多资讯

📰

verl 在 AMD ROCm 上的容器化部署指南:Dockerfile.rocm 镜像构建、配置与训练实战

verl 在 AMD ROCm 上的容器化部署指南:Dockerfile.rocm 镜像构建、配置与训练实战 【免费下载链接】verl verl/HybridFlow: A Flexible and Efficient RL Post-Training Framework 项目地址: https://gitcode.com/GitHub_Trending/ve/verl 本指南以 docker/…

📰

NocoBase集成Gemini-3模型:低代码开发的AI升级

1. NocoBase集成Gemini-3模型的技术解析NocoBase作为一款开源的低代码开发平台,最新版本v2.0.0-alpha.64中引入了对Gemini-3模型的支持。这个更新不仅仅是简单的模型替换,而是对整个AI功能模块的深度优化。Gemini-3作为新一代大语言模型,在函…

📰

Fay 数字人框架完整指南:从零跑通 LLM 驱动的 AI 数字人

Fay 数字人框架完整指南:从零跑通 LLM 驱动的 AI 数字人 【免费下载链接】Fay fay是一个帮助数字人(2.5d、3d、移动、pc、网页)或大语言模型(openai兼容、deepseek)连通业务系统的agent框架。 项目地址: https://git…

📰

Python自动化合并Excel文件实战指南

1. 项目背景与需求分析在日常办公场景中,我们经常会遇到需要合并多个Excel文件的情况。特别是当这些文件具有相同的表头结构时,手动复制粘贴不仅效率低下,还容易出错。最近接手了一个数据整理项目,需要将市场部门提供的12个地区销…

📰

风光互补制氢合成氨系统设计与Python优化实践

1. 项目背景与核心价值风光互补制氢合成氨系统是当前新能源领域的前沿研究方向之一。这个项目标题中提到的"并/离网"系统设计,实际上解决了一个行业痛点:如何平衡可再生能源发电的间歇性与工业生产的连续性需求。我在参与某风电制氢项目时&…

📰

如何在 aspnetcore 的 Helix 测试矩阵中新增一个操作系统队列

如何在 aspnetcore 的 Helix 测试矩阵中新增一个操作系统队列 【免费下载链接】aspnetcore ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux. 项目地址: https://gitcode.com/GitHub_Trending…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬