Python 列表核心知识点详解
列表是 Python 中最基本且最常用的数据结构之一,属于序列(Sequence)类型。它支持索引、切片、添加、删除和修改操作,具有可变性。掌握列表的使用是学习 Python 编程的基础。
详细解析了 Python 列表作为核心序列数据结构的用法。内容涵盖序列基础操作如索引、切片、加减乘及成员资格检查;列表特有的可变性操作包括元素赋值、删除与插入;系统介绍了 append、count、extend、sort 等内置方法及其行为差异。此外,补充了列表推导式的简洁写法、浅拷贝与深拷贝的区别,以及针对列表性能优化的最佳实践建议,帮助开发者全面掌握列表的高级应用与常见陷阱。

列表是 Python 中最基本且最常用的数据结构之一,属于序列(Sequence)类型。它支持索引、切片、添加、删除和修改操作,具有可变性。掌握列表的使用是学习 Python 编程的基础。
Python 中的序列类型包括列表、元组、字符串等。所有序列类型都支持以下通用操作:
序列元素从 0 开始编号,负数索引表示从末尾倒数(-1 为最后一个元素)。
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
# 正索引
print(months[0]) # 输出:Jan
# 负索引
print(months[-1]) # 输出:Dec
实例应用:
endings = ['st', 'nd', 'rd'] + 17 * ['th'] + ['st', 'nd', 'rd'] + 7 * ['th'] + ['st']
year = input("Year: ")
month = int(input("Month: "))
day = int(input("Day: "))
month_name = months[month - 1]
day_ord = str(day) + endings[day - 1]
print(f"{month_name} {day_ord} {year}")
使用 start:end 语法获取范围,包含 start 但不包含 end。支持步长 start:end:step。
tag = 'http://www.python.org'
print(tag[7:21]) # 输出:www.python.org
print(tag[:5]) # 输出:http:
print(tag[7:]) # 输出:www.python.org
print(tag[::-1]) # 输出反向字符串
idx = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(idx[::2]) # 输出:[1, 3, 5, 7, 9] (步长为 2)
仅相同类型的序列可相加。乘法将序列重复指定次数。
# 加法
list_a = [1, 2, 3]
list_b = [4, 5, 6]
print(list_a + list_b) # 输出:[1, 2, 3, 4, 5, 6]
# 乘法
print([12] * 3) # 输出:[12, 12, 12]
# 注意:不同类型不能直接相加
# print([1, 2] + "hello") # 会报错
使用 in 和 not in 运算符判断元素是否存在。
users = ['taobao', 'alibaba', 'root']
username = input('Enter user name: ')
if username in users:
print(f'{username} is authorized!')
else:
print('Access denied!')
列表与元组的主要区别在于可变性。列表可以修改、添加或删除元素,而元组一旦创建不可变。
列表使用方括号 [] 定义,元素间用逗号分隔。
person = ['Edward', 29, 'Hangzhou']
# 元素赋值
person[1] = 30
print(person) # 输出:['Edward', 30, 'Hangzhou']
可以使用 del 语句或切片赋值来删除元素。
names = ['Alice', 'Beth', 'Earl', 'Dimdo']
# 删除单个元素
del names[2]
print(names) # 输出:['Alice', 'Beth', 'Dimdo']
# 切片删除
nums = [1, 2, 3, 4, 5]
nums[2:4] = []
print(nums) # 输出:[1, 2, 5]
利用切片赋值可以实现元素的插入。
num = [1, 5]
num[1:1] = [2, 3, 4] # 在索引 1 处插入
print(num) # 输出:[1, 2, 3, 4, 5]
Python 列表提供了丰富的内置方法,用于管理数据。
| 方法 | 说明 |
|---|---|
append(x) | 在末尾添加元素 x |
count(x) | 返回 x 出现的次数 |
extend(iterable) | 扩展列表,追加可迭代对象的所有元素 |
index(x) | 返回 x 第一次出现的索引 |
insert(i, x) | 在索引 i 处插入元素 x |
pop([i]) | 移除并返回索引 i 处的元素(默认为末尾) |
remove(x) | 移除第一个值为 x 的元素 |
reverse() | 原地反转列表 |
sort(key=None, reverse=False) | 原地排序列表 |
x = ['to', 'be', 'or', 'not', 'to', 'be']
# count
print(x.count('to')) # 输出:2
# extend
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a) # 输出:[1, 2, 3, 4, 5, 6]
# index
print(a.index(5)) # 输出:5
# insert
a.insert(0, 'start')
print(a) # 输出:['start', 1, 2, 3, 4, 5, 6]
# pop
val = a.pop() # 移除末尾
print(val) # 输出:6
# remove
a.remove('start')
print(a)
# reverse
a.reverse()
print(a)
sort() 方法会修改原列表并返回 None。若需保留原列表,应使用内置函数 sorted()。
x = [5, 1, 2, 4, 3, 6]
y = x.sort()
print(x) # 输出:[1, 2, 3, 4, 5, 6]
print(y) # 输出:None
z = sorted(x)
print(z) # 输出:[1, 2, 3, 4, 5, 6]
print(x) # 原列表不变
注意:Python 3 中已移除
cmp()函数,比较逻辑通常结合key参数实现。
列表推导式(List Comprehension)是一种简洁的创建列表的方式,常用于过滤或转换数据。
# 生成平方数
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(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
# 嵌套循环
matrix = [[i*j for j in range(3)] for i in range(3)]
print(matrix)
直接赋值不会创建新列表,而是引用同一对象。修改其中一个会影响另一个。
a = [1, 2, 3]
b = a
b.append(4)
print(a) # 输出:[1, 2, 3, 4] (a 也变了)
# 浅拷贝
b = a.copy() # 或 b = a[:]
b.append(5)
print(a) # 输出:[1, 2, 3, 4]
print(b) # 输出:[1, 2, 3, 4, 5]
# 深拷贝 (适用于嵌套列表)
import copy
c = copy.deepcopy(a)
list.insert(0, item) 时间复杂度为 O(n),建议使用 collections.deque。(x for x in ...) 比 [x for x in ...] 更节省内存。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