Python列表:你的万能瑞士军刀,从入门到“切片”高手 🍕
掌握了Python列表,你就掌握了数据处理的一半江山——这话一点都不夸张!
1. 列表定义与切片:Python中的“瑞士军刀”
列表是什么?
想象一下你去购物,手里拿着一张购物清单——这就是列表!在Python中,列表是一个有序、可变、允许重复元素的集合。
shopping_list = ["苹果", "香蕉", "牛奶", "鸡蛋"] numbers = [1, 2, 3, 4, 5] mixed_list = [42, "你好", 3.14, True, [1, 2, 3]] empty_list = [] another_empty = list()
print(f"购物清单: {shopping_list}") print(f"混合列表: {mixed_list}")
|
切片:列表的“精准切割术” 🔪
切片就像切蛋糕——你可以只取你想要的那一块!
fruits = ["苹果", "香蕉", "橙子", "葡萄", "芒果", "草莓", "西瓜"]
print(fruits[1:4]) print(fruits[:3]) print(fruits[3:]) print(fruits[-3:]) print(fruits[::2]) print(fruits[::-1])
original = [1, 2, 3, 4, 5] sliced = original[1:4] sliced[0] = 999 print(f"原列表: {original}") print(f"切片: {sliced}")
|
2. 列表方法大全:增删改查样样精通
增:给列表”添砖加瓦” 🧱
foods = ["披萨", "汉堡"]
foods.append("薯条") print(f"添加薯条后: {foods}")
foods.extend(["可乐", "冰淇淋"]) print(f"扩展后: {foods}")
foods.insert(1, "炸鸡") print(f"插入炸鸡后: {foods}")
|
删:做列表的”断舍离” 🗑️
foods.remove("汉堡") print(f"删除汉堡后: {foods}")
popped_item = foods.pop(2) print(f"弹出索引2: {popped_item}") print(f"弹出后列表: {foods}")
temp_list = [1, 2, 3] temp_list.clear() print(f"清空后: {temp_list}")
|
改:列表”整容术” ✨
foods[1] = "炸鸡腿" print(f"修改后: {foods}")
numbers = [0, 1, 2, 3, 4, 5] numbers[1:4] = [10, 20, 30] print(f"批量修改: {numbers}")
|
查:列表”侦探工作” 🔍
colors = ["红", "绿", "蓝", "绿", "黄"] green_index = colors.index("绿") print(f"'绿'第一次出现在索引: {green_index}")
green_count = colors.count("绿") print(f"'绿'出现了 {green_count} 次")
has_blue = "蓝" in colors print(f"列表中有蓝色吗? {has_blue}")
|
排序与翻转:列表”整理术” 📊
numbers = [3, 1, 4, 1, 5, 9, 2, 6] numbers.sort() print(f"升序排序: {numbers}")
numbers.sort(reverse=True) print(f"降序排序: {numbers}")
original = [3, 1, 2] sorted_list = sorted(original) print(f"原列表: {original}") print(f"排序后新列表: {sorted_list}")
colors = ["红", "橙", "黄", "绿", "蓝"] colors.reverse() print(f"反转后: {colors}")
|
3. 列表拷贝:浅拷贝 vs 深拷贝的”分身术”
浅拷贝:只拷贝”皮肤”,不拷贝”内脏”
original = [1, 2, 3] shallow_copy = original.copy() shallow_copy[0] = 999 print(f"原列表: {original}") print(f"浅拷贝: {shallow_copy}")
shallow_copy2 = original[:] shallow_copy2[1] = 888 print(f"切片拷贝: {shallow_copy2}")
original = [[1, 2], [3, 4]] shallow_copy = original.copy()
shallow_copy[0][0] = 999 print(f"原列表: {original}") print(f"浅拷贝: {shallow_copy}")
|
深拷贝:连”内脏”也一起拷贝
import copy
original = [[1, 2], [3, 4]] deep_copy = copy.deepcopy(original)
deep_copy[0][0] = 999 print(f"原列表: {original}") print(f"深拷贝: {deep_copy}")
|
比喻理解:
- 浅拷贝:就像复印一张纸,纸上的文字被复制了,但如果纸上有”请查看抽屉”的指示,那么原纸和复印件都会指向同一个抽屉。
- 深拷贝:不仅复印了纸,还把抽屉里的东西也全部复印了一份,两者完全独立。
4. 列表运算与嵌套:列表的”社交活动” 👥
列表加法和乘法
list1 = [1, 2, 3] list2 = [4, 5, 6] result = list1 + list2 print(f"列表加法: {result}")
repeat_list = ["嗨"] * 3 print(f"列表乘法: {repeat_list}")
matrix_wrong = [[0] * 3] * 3 matrix_wrong[0][0] = 1 print(f"错误的方式: {matrix_wrong}")
matrix_correct = [[0] * 3 for _ in range(3)] matrix_correct[0][0] = 1 print(f"正确的方式: {matrix_correct}")
|
嵌套列表:列表中的列表
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
print(f"第一行: {matrix[0]}") print(f"第二行第三列: {matrix[1][2]}")
print("矩阵内容:") for row in matrix: for item in row: print(item, end=" ") print()
|
5. 列表推导式:Python的”语法糖” 🍬
列表推导式是Python最优雅的特性之一,让代码更简洁、更Pythonic!
基本推导式
squares_old = [] for i in range(1, 6): squares_old.append(i ** 2) print(f"传统方式: {squares_old}")
squares_new = [i ** 2 for i in range(1, 6)] print(f"推导式: {squares_new}")
|
带条件的推导式
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0] print(f"偶数平方: {even_squares}")
numbers = [-5, 3, -2, 9, -1] abs_values = [abs(x) for x in numbers] print(f"绝对值: {abs_values}")
|
嵌套推导式
multiplication_table = [[i * j for j in range(1, 4)] for i in range(1, 4)] print("乘法表:") for row in multiplication_table: print(row)
nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]] flat_list = [item for sublist in nested_list for item in sublist] print(f"扁平化: {flat_list}")
|
推导式 vs 传统循环
| 场景 |
传统循环 |
列表推导式 |
| 简单转换 |
代码多,易读 |
简洁,Pythonic |
| 复杂逻辑 |
更清晰 |
可能难以理解 |
| 性能 |
稍慢 |
稍快(优化过的C代码) |
| 副作用 |
容易处理 |
不适合有副作用的操作 |
黄金法则:如果推导式让代码更清晰易懂,就用它;如果变得难以理解,就回到传统循环。
总结:列表的”生存指南” 📚
Python列表就像你的数字瑞士军刀:
- 创建简单:用方括号
[]就能定义
- 操作丰富:增删改查排序样样行
- 切片灵活:像切蛋糕一样取数据
- 拷贝小心:浅拷贝 vs 深拷贝要分清
- 推导式优雅:一行代码顶多行
记住,列表是有序、可变的,这是它与元组(不可变)和集合(无序)的主要区别。
menu = ["鱼香肉丝", "宫保鸡丁", "麻婆豆腐"]
menu.append("回锅肉") menu.insert(1, "水煮鱼")
if "麻婆豆腐" in menu: menu.remove("麻婆豆腐")
special = menu.pop(0) menu.append(f"{special}(特价)")
numbered_menu = [f"{i+1}. {dish}" for i, dish in enumerate(menu)] print("今日菜单:") for item in numbered_menu: print(item)
|
列表是Python中最基础、最常用的数据结构之一,掌握了它,你就迈出了成为Python高手的重要一步!现在就去创建你的列表,开始Python之旅吧! 🚀
提示:列表虽好,但不要过度使用嵌套和复杂推导式哦——代码的可读性永远比炫技更重要!