坚持用 清晰易懂的图解 + 代码语言,让每个知识点变得简单!
🚀呆头个人主页详情
🌱 呆头个人Gitee代码仓库
📌 呆头详细专栏系列
座右铭: “不患无位,患所以立。”
Python列表和元组:从入门到花式操作指南
前言
🔥 “灵根检测发现:阁下竟是万中无一的编程奇才!”
这是一个用修仙世界观解构Python学习的硬核专栏:
- 练气期:变量/循环/函数(基础心法)
- 筑基期:面向对象/异常处理(护体罡气)
- 金丹期:爬虫/数据分析(神通初成)
- 元婴期:Django/机器学习(开辟紫府)
✍️ 你将获得:
✅ 每章配套「渡劫雷法」(实战项目)
✅ 避免走火入魔的「心魔警示」(避坑指南)
✅ 飞升大能的「神识传承」(大佬代码赏析)“三千大道,Py为尊。本座在此布道,助你斩尽BUG,证道代码金仙!”
(正文开始👇)
目录
1. 初识列表与元组
在Python中,列表(list)和元组(tuple)都是有序集合数据类型,但它们的核心区别在于:
- 列表是可变对象(创建后可以修改)
- 元组是不可变对象(创建后不能修改)
# 创建示例
my_list = [1, 2, 'Python'] # 方括号表示列表
my_tuple = (3, 4, 'Code') # 圆括号表示元组
2. 列表的十八般武艺
2.1 创建与访问
# 创建方式大全
empty_list = []
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]
# 访问元素(索引从0开始)
print(numbers[0]) # 输出: 1
print(mixed[-1]) # 输出: True (负索引表示倒数)
2.2 切片操作
# 切片语法:[start:end:step]
letters = ['a', 'b', 'c', 'd', 'e']
print(letters[1:4]) # 输出: ['b', 'c', 'd']
print(letters[::2]) # 输出: ['a', 'c', 'e']
print(letters[::-1]) # 输出: ['e', 'd', 'c', 'b', 'a'] (反转列表)
2.3 修改与增删元素
# 修改元素
numbers[2] = 99 # [1, 2, 99, 4, 5]
# 添加元素
numbers.append(6) # 末尾添加 → [1, 2, 99, 4, 5, 6]
numbers.insert(2, 1.5) # 指定位置插入 → [1, 2, 1.5, 99, 4, 5, 6]
# 删除元素
del numbers[3] # 删除索引3 → [1, 2, 1.5, 4, 5, 6]
numbers.remove(1.5) # 删除特定值 → [1, 2, 4, 5, 6]
popped = numbers.pop() # 弹出末尾 → popped=6, numbers=[1, 2, 4, 5]
2.4 查找与连接
# 查找操作
nums = [10, 20, 30, 40, 50]
print(30 in nums) # 输出: True
print(nums.index(40)) # 输出: 3
# 列表连接
list1 = [1, 2]
list2 = [3, 4]
combined = list1 + list2 # [1, 2, 3, 4]
list1.extend(list2) # list1变为[1, 2, 3, 4]
3. 元组的特殊技能
虽然元组不可变,但在这些场景下特别有用:
- 作为字典键(因为不可变)
- 函数返回多个值时
- 保证数据不被意外修改
# 元组操作
point = (3, 4)
x, y = point # 解包赋值
print(point[1]) # 输出: 4
# 单元素元组需要加逗号
single = (42,) # 注意逗号
not_a_tuple = (42) # 这只是整数42
4. 性能与选择对比
特性 | 列表(list) | 元组(tuple) |
---|---|---|
可变性 | ✔️ 可变 | ❌ 不可变 |
内存占用 | 较大 | 较小 |
迭代速度 | 较慢 | 较快 |
适用场景 | 动态数据 | 固定数据 |
能否作为字典键 | ❌ 不能 | ✔️ 能 |
5. 可视化图解
图1:列表内存结构图(classDiagram)
图2:元组VS列表操作流程图(flowchart)
图3:操作时间复杂度对比(pie)
6. 总结
在实际开发中,我的经验法则是:能用元组就不用列表。这不仅因为元组更轻量、更安全,更是对程序可预测性的一种保障。特别是在多线程环境下,不可变对象就是天然的线程安全保证。
但列表的那些花式操作确实让人欲罢不能。记得有次我用列表切片[::-1]实现字符串反转时,旁边Java同事投来羡慕的眼神。Python的这种"瑞士军刀"式的设计哲学,正是它吸引我的地方。
最后分享一个真实案例:在开发电商系统时,我用元组存储商品规格(颜色、尺寸等),用列表存储用户购物车条目。这样既保证了规格不可篡改,又允许购物车动态增减。这种"各司其职"的设计,让代码既健壮又灵活。
7. 参考资料
#Python #数据结构 #列表 #元组 #编程技巧
📢 如果你也喜欢这种"不呆头"的技术风格:
👁️ 【关注】 看一个非典型程序员如何用野路子解决正经问题
👍 【点赞】 给"不写八股文"的技术分享一点鼓励
🔖 【收藏】 把这些"奇怪但有用"的代码技巧打包带走
💬 【评论】 来聊聊——你遇到过最"呆头"的 Bug 是啥?
🗳️ 【投票】 您的投票是支持我前行的动力
技术没有标准答案,让我们一起用最有趣的方式,写出最靠谱的代码! 🎮💻