Python 常用数据结构:列表(List)基础用法与操作详解
本文详细介绍了 Python 列表(List)的基础用法与核心操作。内容涵盖列表的定义与创建、索引与切片访问、列表运算(拼接、重复)、元素遍历方法、常见的列表操作方法(如 append、sort、pop 等)、列表推导式的语法及应用,以及浅拷贝与深拷贝的区别。文章最后通过掷骰子统计的实战案例,展示了如何利用列表优化代码结构,提升数据处理效率。

本文详细介绍了 Python 列表(List)的基础用法与核心操作。内容涵盖列表的定义与创建、索引与切片访问、列表运算(拼接、重复)、元素遍历方法、常见的列表操作方法(如 append、sort、pop 等)、列表推导式的语法及应用,以及浅拷贝与深拷贝的区别。文章最后通过掷骰子统计的实战案例,展示了如何利用列表优化代码结构,提升数据处理效率。

在编程过程中,我们经常需要处理一组有序的数据。例如,统计掷骰子 6000 次中每种点数出现的次数。如果使用多个变量分别记录,代码会变得冗长且难以维护。Python 提供了**列表(List)**这种强大的容器类型,可以高效地存储和操作多个数据。
列表是由一系列元素按特定顺序构成的数据序列。在 Python 中,可以使用 [] 字面量语法来定义列表,列表中的多个元素用逗号进行分隔。
# 整数列表
items1 = [35, 12, 99, 68, 55, 35, 87]
# 字符串列表
items2 = ['Python', 'Java', 'Go', 'Kotlin']
# 混合类型列表(不推荐,但允许)
items3 = [100, 12.3, 'Python', True]
print(items1) # [35, 12, 99, 68, 55, 35, 87]
print(items2) # ['Python', 'Java', 'Go', 'Kotlin']
print(items3) # [100, 12.3, 'Python', True]
说明:列表中可以有重复元素;列表中也可以包含不同类型的元素,但为了代码的可读性和可维护性,通常建议保持列表内元素类型一致。
除了使用字面量,还可以使用内置的 list() 函数将其他序列转换为列表。list 是一个构造器。
# 将 range 对象转换为列表
items4 = list(range(1, 10))
# 将字符串拆分为字符列表
items5 = list('hello')
print(items4) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(items5) # ['h', 'e', 'l', 'l', 'o']
+):将两个列表的元素连接起来。*):将列表元素重复指定的次数。list_a = [1, 2, 3]
list_b = [4, 5]
print(list_a + list_b) # [1, 2, 3, 4, 5]
print(list_a * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
使用 in 或 not in 运算符判断元素是否存在于列表中。
print(3 in list_a) # True
print(10 not in list_a) # True
列表支持通过索引访问元素。索引从 0 开始,也可以使用负数索引从末尾向前计数。
fruits = ['apple', 'banana', 'cherry', 'date']
print(fruits[0]) # apple (第一个)
print(fruits[-1]) # date (最后一个)
print(fruits[-2]) # cherry (倒数第二个)
注意:如果索引超出范围(如
fruits[10]),会抛出IndexError: list index out of range异常。
切片用于获取列表的一部分,格式为 [start:end:stride]。
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[2:5]) # [2, 3, 4] (不包含 end)
print(nums[:3]) # [0, 1, 2] (省略 start)
print(nums[::2]) # [0, 2, 4, 6, 8] (步长为 2)
print(nums[::-1]) # [9, 8, ..., 0] (反转列表)
切片不仅可以读取,还可以修改列表内容。
nums[2:5] = [10, 20, 30]
print(nums) # [0, 1, 10, 20, 30, 5, 6, 7, 8, 9]
最简洁的方式是直接遍历列表元素。
languages = ['Python', 'Java', 'C++']
for lang in languages:
print(lang)
如果需要同时获取索引和值,可以使用 enumerate。
for index, lang in enumerate(languages):
print(f'{index}: {lang}')
列表是可变对象,支持多种原地操作方法。
| 方法 | 描述 |
|---|---|
append(x) | 在列表末尾添加元素 x |
extend(iterable) | 将可迭代对象中的所有元素添加到列表末尾 |
insert(i, x) | 在索引 i 处插入元素 x |
remove(x) | 移除列表中第一个值为 x 的元素 |
pop([i]) | 移除并返回索引 i 处的元素,默认为最后一个 |
clear() | 清空列表 |
index(x) | 返回列表中第一个值为 x 的元素的索引 |
count(x) | 返回列表中值为 x 的元素个数 |
sort() | 对列表进行原地排序 |
reverse() | 反转列表元素顺序 |
my_list = [3, 1, 4, 1, 5]
my_list.append(9)
print(my_list) # [3, 1, 4, 1, 5, 9]
my_list.remove(1)
print(my_list) # [3, 4, 1, 5, 9]
my_list.sort()
print(my_list) # [1, 3, 4, 5, 9]
reversed_list = my_list[::-1]
print(reversed_list) # [9, 5, 4, 3, 1]
列表推导式是一种简洁的创建列表的方法,常用于过滤或转换数据。
# 生成平方数列表
squares = [x**2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 带条件的列表推导
evens = [x for x in range(20) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
当列表中包含嵌套列表时,直接使用 = 赋值或 list() 复制只会创建浅拷贝,即内部对象仍共享引用。
original = [[1, 2], [3, 4]]
copy_list = original[:] # 浅拷贝
copy_list[0][0] = 99
print(original) # [[99, 2], [3, 4]] (原列表也被修改)
如需完全独立的副本,需使用 copy 模块中的 deepcopy。
使用列表重构之前的掷骰子统计任务,代码更加简洁优雅。
"""
将一颗色子掷 6000 次,统计每种点数出现的次数
"""
import random
# 初始化计数器列表,长度为 6,初始值为 0
counters = [0] * 6
for _ in range(6000):
face = random.randrange(1, 7)
counters[face - 1] += 1
for face in range(1, 7):
print(f'{face}点出现了{counters[face - 1]}次')
在这个例子中,我们利用列表的随机访问特性,避免了大量的 if-else 分支判断,显著提升了代码的可读性和扩展性。
列表是 Python 中最基本且最常用的数据结构之一。它支持动态扩容、索引访问、切片操作以及丰富的内置方法。掌握列表的创建、操作及常见陷阱(如浅拷贝),是编写高质量 Python 代码的基础。在实际开发中,结合列表推导式和内置函数,可以极大地简化数据处理逻辑。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online