Python3 列表(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

Python3 列表(List)是编程中最为常用的数据结构之一。它像一个灵活的“万能工具箱”,可以存储多种类型的数据,并支持高效的增删改查操作。无论是处理简单数据还是构建复杂算法,列表都是开发者不可或缺的工具。本文将从基础概念出发,逐步深入讲解 Python3 列表的核心特性、应用场景和优化技巧,帮助读者在实际开发中灵活运用这一数据结构。


列表基础:创建与基本操作

1. 列表的创建

列表用方括号 [] 定义,元素之间用逗号分隔。例如:

empty_list = []

mixed_list = [1, "hello", 3.14, True]

比喻:可以将列表想象成一个书架,每个“书格”对应一个元素的位置。例如:["小说", "散文", "诗歌"] 就是一个包含三本书的书架。

2. 元素访问与索引

列表的索引从 0 开始,支持正向和负向索引:

books = ["小说", "散文", "诗歌"]
print(books[0])   # 输出:"小说"
print(books[-1])  # 输出:"诗歌"(最后一个元素)

常见操作示例

print(books[2])   # 输出:"诗歌"


列表的增删改查:核心操作详解

1. 修改元素

通过索引可以直接修改列表中的元素:

numbers = [10, 20, 30]
numbers[1] = 25  # 将第二个元素改为25
print(numbers)    # 输出:[10, 25, 30]

2. 添加元素

  • append():在列表末尾添加一个元素:

    fruits = ["apple", "banana"]
    fruits.append("orange")
    print(fruits)  # 输出:["apple", "banana", "orange"]
    
  • insert():在指定位置插入元素:

    fruits.insert(1, "grape")
    print(fruits)  # 输出:["apple", "grape", "banana", "orange"]
    

3. 删除元素

  • remove():按值删除第一个匹配的元素:

    fruits.remove("grape")
    print(fruits)  # 输出:["apple", "banana", "orange"]
    
  • pop():按索引删除元素并返回其值:

    removed = fruits.pop(1)  # 删除索引1的元素
    print(removed)           # 输出:"banana"
    

4. 列表切片

切片语法 [:] 可以提取子列表:

numbers = [0, 1, 2, 3, 4, 5]
sub_list = numbers[1:4]    # 从索引1到3(不包含4)
print(sub_list)            # 输出:[1, 2, 3]

负数索引与步长

reversed_numbers = numbers[::-1]
print(reversed_numbers)    # 输出:[5, 4, 3, 2, 1, 0]

列表的高级特性与技巧

1. 列表推导式(List Comprehensions)

通过一行代码生成复杂列表:

squares = [x**2 for x in range(10)]
print(squares)  # 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

条件过滤

even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # 输出:[0, 4, 16, 36, 64]

2. 列表的拼接与复制

  • 拼接列表:用 +extend() 方法:

    list1 = [1, 2]
    list2 = [3, 4]
    combined = list1 + list2    # 输出:[1, 2, 3, 4]
    list1.extend(list2)         # list1 变为 [1, 2, 3, 4]
    
  • 列表复制

    # 浅拷贝(新列表与原列表共享元素)
    copy_list = original_list.copy()
    

3. 嵌套列表与多维数据

列表可以包含其他列表,形成多维结构:

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[1][2])  # 输出:6(第二行第三列)

列表的内置方法与性能优化

1. 常用内置方法

方法作用示例
append()在末尾添加元素list.append(x)
insert()在指定位置插入元素list.insert(i, x)
remove()删除第一个匹配值list.remove(x)
pop()删除并返回指定索引元素list.pop(i)
index()获取元素的索引list.index(x)
count()统计元素出现次数list.count(x)
sort()排序列表(原地修改)list.sort()
reverse()反转列表顺序list.reverse()

2. 性能注意事项

  • 避免频繁插入头部:列表在头部插入元素时,需要移动所有后续元素,时间复杂度为 O(n)。
  • 使用生成器表达式:处理大数据集时,用生成器替代列表推导式以节省内存:
    # 生成器表达式(节省内存)
    gen = (x**2 for x in range(1000000))
    

常见问题与解决方案

1. 列表与元组的区别

  • 列表:可变(Mutable),支持增删改。
  • 元组:不可变(Immutable),性能更高,适合固定数据。
my_tuple = (1, 2, 3)  # 元组无法修改元素

2. 列表深拷贝与浅拷贝

  • 浅拷贝:复制一层引用,子对象仍指向原地址:

    list_a = [[1, 2], [3, 4]]
    list_b = list_a.copy()
    list_b[0][0] = 0  # list_a 和 list_b 的第一个子列表都被修改
    
  • 深拷贝:递归复制所有层级对象:

    import copy
    list_c = copy.deepcopy(list_a)  # 修改 list_c 不影响 list_a
    

3. 列表排序与稳定性

  • sort() 默认按升序排列,可通过 reverse=True 反转:

    numbers = [5, 3, 8, 1]
    numbers.sort()         # [1, 3, 5, 8]
    numbers.sort(reverse=True)  # [8, 5, 3, 1]
    
  • 自定义排序规则:

    # 按字符串长度排序
    words = ["apple", "banana", "pear"]
    words.sort(key=lambda x: len(x))
    

实战案例:用列表解决实际问题

案例1:计算学生平均分

grades = [85, 92, 78, 90, 88]
total = sum(grades)
average = total / len(grades)
print(f"平均分:{average:.1f}")  # 输出:86.6

案例2:去重与统计

text = "apple banana apple orange banana"
words = text.split()
word_counts = {}
for word in words:
    word_counts[word] = word_counts.get(word, 0) + 1
print(word_counts)  # 输出:{'apple': 2, 'banana': 2, 'orange': 1}

案例3:文件名批量处理

filenames = ["report.txt", "image.jpg", "notes.txt"]
txt_files = [f for f in filenames if f.endswith(".txt")]
print(txt_files)  # 输出:['report.txt', 'notes.txt']

结论

Python3 列表凭借其灵活性和高效性,成为开发者处理数据的首选工具。从基础的增删改查到高级的列表推导式和多维嵌套,列表能够适应从简单脚本到复杂算法的多样化需求。掌握列表的特性与最佳实践,不仅能提升代码效率,还能为后续学习字典、集合等数据结构打下坚实基础。

希望本文能帮助读者系统化理解 Python3 列表的全貌,并在实际项目中游刃有余地运用这一强大的工具。如需进一步探索,可尝试结合其他数据结构(如字典、集合)设计更复杂的程序逻辑,逐步提升编程能力。

最新发布