Skip to content

Python 列表

列表是 Python 中最常用的数据结构之一,用于存储一系列有序的元素。本章节将详细介绍 Python 中的列表及其操作。

列表的创建

可以使用方括号 []list() 函数来创建列表。

示例:

python
# 列表的创建

# 使用方括号创建列表
list1 = [1, 2, 3, 4, 5]
print(list1)  # 输出:[1, 2, 3, 4, 5]

# 创建空列表
list2 = []
print(list2)  # 输出:[]

# 创建包含不同类型元素的列表
list3 = [1, "hello", 3.14, True]
print(list3)  # 输出:[1, 'hello', 3.14, True]

# 使用 list() 函数创建列表
list4 = list()
print(list4)  # 输出:[]

# 使用 list() 函数将其他可迭代对象转换为列表
list5 = list("hello")
print(list5)  # 输出:['h', 'e', 'l', 'l', 'o']

list6 = list(range(10))
print(list6)  # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

列表的访问

可以使用索引来访问列表中的单个元素,使用切片来访问子列表。

索引

列表的索引从 0 开始,可以使用正索引或负索引。

示例:

python
# 列表的索引
list = [1, 2, 3, 4, 5]

# 正索引
print(list[0])  # 输出:1
print(list[1])  # 输出:2
print(list[2])  # 输出:3
print(list[3])  # 输出:4
print(list[4])  # 输出:5

# 负索引(从右向左)
print(list[-1])  # 输出:5
print(list[-2])  # 输出:4
print(list[-3])  # 输出:3
print(list[-4])  # 输出:2
print(list[-5])  # 输出:1

切片

使用切片操作可以获取列表的子列表,语法为 list[start:end:step]

示例:

python
# 列表的切片
list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 获取从索引 0 到 5 的子列表(不包含索引 5)
print(list[0:5])  # 输出:[0, 1, 2, 3, 4]

# 获取从索引 5 到末尾的子列表
print(list[5:])  # 输出:[5, 6, 7, 8, 9]

# 获取从开始到索引 5 的子列表
print(list[:5])  # 输出:[0, 1, 2, 3, 4]

# 获取整个列表
print(list[:])  # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 使用步长
print(list[::2])  # 输出:[0, 2, 4, 6, 8]

# 反向列表
print(list[::-1])  # 输出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# 获取从索引 2 到 8,步长为 2 的子列表
print(list[2:8:2])  # 输出:[2, 4, 6]

列表的修改

列表是可变的,可以修改列表中的元素。

示例:

python
# 列表的修改
list = [1, 2, 3, 4, 5]

# 修改单个元素
list[0] = 10
print(list)  # 输出:[10, 2, 3, 4, 5]

list[-1] = 50
print(list)  # 输出:[10, 2, 3, 4, 50]

# 修改多个元素(切片赋值)
list[1:4] = [20, 30, 40]
print(list)  # 输出:[10, 20, 30, 40, 50]

# 插入元素(使用切片赋值)
list[2:2] = [25]
print(list)  # 输出:[10, 20, 25, 30, 40, 50]

# 删除元素(使用切片赋值)
list[2:4] = []
print(list)  # 输出:[10, 20, 40, 50]

列表的方法

Python 提供了许多内置的列表方法,用于操作列表。

添加元素

方法描述示例
append(element)在列表末尾添加一个元素list.append(6)
extend(iterable)在列表末尾添加可迭代对象中的所有元素list.extend([6, 7, 8])
insert(index, element)在指定位置插入一个元素list.insert(0, 0)

示例:

python
# 添加元素
list = [1, 2, 3, 4, 5]

# append() 方法
list.append(6)
print(list)  # 输出:[1, 2, 3, 4, 5, 6]

# extend() 方法
list.extend([7, 8, 9])
print(list)  # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

# insert() 方法
list.insert(0, 0)
print(list)  # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list.insert(5, 4.5)
print(list)  # 输出:[0, 1, 2, 3, 4, 4.5, 5, 6, 7, 8, 9]

删除元素

方法描述示例
remove(element)删除第一个匹配的元素list.remove(3)
pop(index)删除并返回指定位置的元素,默认为最后一个list.pop()
clear()清空列表list.clear()

示例:

python
# 删除元素
list = [0, 1, 2, 3, 4, 4.5, 5, 6, 7, 8, 9]

# remove() 方法
list.remove(4.5)
print(list)  # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# pop() 方法
popped_element = list.pop()
print(popped_element)  # 输出:9
print(list)  # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8]

popped_element = list.pop(0)
print(popped_element)  # 输出:0
print(list)  # 输出:[1, 2, 3, 4, 5, 6, 7, 8]

# clear() 方法
list.clear()
print(list)  # 输出:[]

排序和反转

方法描述示例
sort(key, reverse)对列表进行排序list.sort()
sorted(iterable, key, reverse)返回排序后的列表副本sorted(list)
reverse()反转列表list.reverse()
reversed(iterable)返回反转后的迭代器reversed(list)

示例:

python
# 排序和反转
list = [3, 1, 4, 1, 5, 9, 2, 6, 5]

# sort() 方法(原地排序)
list.sort()
print(list)  # 输出:[1, 1, 2, 3, 4, 5, 5, 6, 9]

# 降序排序
list.sort(reverse=True)
print(list)  # 输出:[9, 6, 5, 5, 4, 3, 2, 1, 1]

# sorted() 函数(返回新列表)
list = [3, 1, 4, 1, 5, 9, 2, 6, 5]
sorted_list = sorted(list)
print(sorted_list)  # 输出:[1, 1, 2, 3, 4, 5, 5, 6, 9]
print(list)  # 输出:[3, 1, 4, 1, 5, 9, 2, 6, 5](原列表不变)

# reverse() 方法(原地反转)
list.reverse()
print(list)  # 输出:[5, 6, 2, 9, 5, 1, 4, 1, 3]

# reversed() 函数(返回迭代器)
list = [3, 1, 4, 1, 5]
reversed_iter = reversed(list)
print(list(reversed_iter))  # 输出:[5, 1, 4, 1, 3]
print(list)  # 输出:[3, 1, 4, 1, 5](原列表不变)

查找和计数

方法描述示例
index(element, start, end)返回第一个匹配元素的索引list.index(5)
count(element)统计元素在列表中出现的次数list.count(1)

示例:

python
# 查找和计数
list = [3, 1, 4, 1, 5, 9, 2, 6, 5]

# index() 方法
print(list.index(5))  # 输出:4
print(list.index(1, 2))  # 从索引 2 开始查找,输出:3

# count() 方法
print(list.count(1))  # 输出:2
print(list.count(5))  # 输出:2
print(list.count(10))  # 输出:0(元素不存在)

其他方法

方法描述示例
copy()返回列表的浅拷贝list.copy()
len(list)返回列表的长度len(list)
in检查元素是否在列表中5 in list
not in检查元素是否不在列表中10 not in list

示例:

python
# 其他方法
list = [1, 2, 3, 4, 5]

# copy() 方法
list_copy = list.copy()
print(list_copy)  # 输出:[1, 2, 3, 4, 5]

# 修改原列表,不影响拷贝
list[0] = 10
print(list)  # 输出:[10, 2, 3, 4, 5]
print(list_copy)  # 输出:[1, 2, 3, 4, 5]

# len() 函数
print(len(list))  # 输出:5

# in 运算符
print(3 in list)  # 输出:True
print(10 in list)  # 输出:True
print(6 in list)  # 输出:False

# not in 运算符
print(6 not in list)  # 输出:True
print(3 not in list)  # 输出:False

列表的遍历

可以使用 for 循环来遍历列表中的元素。

示例:

python
# 列表的遍历
list = [1, 2, 3, 4, 5]

# 遍历元素
print("遍历元素:")
for element in list:
    print(element)

# 遍历索引和元素
print("\n遍历索引和元素:")
for index, element in enumerate(list):
    print(f"索引 {index}: {element}")

# 遍历索引
print("\n遍历索引:")
for index in range(len(list)):
    print(f"索引 {index}: {list[index]}")

# 反向遍历
print("\n反向遍历:")
for element in reversed(list):
    print(element)

# 遍历步长
print("\n遍历步长:")
for element in list[::2]:
    print(element)

列表推导式

列表推导式是一种简洁的创建列表的方法,语法为 [expression for item in iterable if condition]

示例:

python
# 列表推导式

# 创建一个包含 0 到 9 的列表
list1 = [i for i in range(10)]
print(list1)  # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 创建一个包含 0 到 9 的平方的列表
list2 = [i**2 for i in range(10)]
print(list2)  # 输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# 创建一个包含 0 到 9 的偶数的列表
list3 = [i for i in range(10) if i % 2 == 0]
print(list3)  # 输出:[0, 2, 4, 6, 8]

# 创建一个包含字符串长度的列表
words = ["hello", "world", "python"]
list4 = [len(word) for word in words]
print(list4)  # 输出:[5, 5, 6]

# 嵌套列表推导式
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

# 条件列表推导式
list5 = [i if i % 2 == 0 else -i for i in range(10)]
print(list5)  # 输出:[0, -1, 2, -3, 4, -5, 6, -7, 8, -9]

列表的嵌套

列表可以嵌套,即一个列表中可以包含其他列表。

示例:

python
# 列表的嵌套

# 创建嵌套列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix)  # 输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 访问嵌套列表中的元素
print(matrix[0])  # 输出:[1, 2, 3]
print(matrix[0][0])  # 输出:1
print(matrix[1][2])  # 输出:6
print(matrix[2][1])  # 输出:8

# 修改嵌套列表中的元素
matrix[0][0] = 10
print(matrix)  # 输出:[[10, 2, 3], [4, 5, 6], [7, 8, 9]]

# 遍历嵌套列表
print("遍历嵌套列表:")
for row in matrix:
    for num in row:
        print(num, end=" ")
    print()

列表的深浅拷贝

浅拷贝

浅拷贝创建一个新列表,但列表中的元素仍然是原列表中元素的引用。

示例:

python
# 浅拷贝
list1 = [1, 2, [3, 4]]
list2 = list1.copy()

# 修改原列表中的不可变元素
list1[0] = 10
print(list1)  # 输出:[10, 2, [3, 4]]
print(list2)  # 输出:[1, 2, [3, 4]](不受影响)

# 修改原列表中的可变元素
list1[2][0] = 30
print(list1)  # 输出:[10, 2, [30, 4]]
print(list2)  # 输出:[1, 2, [30, 4]](受影响)

深拷贝

深拷贝创建一个新列表,并且递归地拷贝列表中的所有元素。

示例:

python
# 深拷贝
import copy

list1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1)

# 修改原列表中的不可变元素
list1[0] = 10
print(list1)  # 输出:[10, 2, [3, 4]]
print(list2)  # 输出:[1, 2, [3, 4]](不受影响)

# 修改原列表中的可变元素
list1[2][0] = 30
print(list1)  # 输出:[10, 2, [30, 4]]
print(list2)  # 输出:[1, 2, [3, 4]](不受影响)

总结

Python 中的列表是一种非常灵活的数据结构,提供了丰富的方法来操作元素。本章节介绍了列表的创建、访问、修改、方法、遍历、推导式、嵌套和拷贝等内容。掌握这些列表操作对于编写 Python 代码非常重要。