Python列表全面用法总结及实例详解
Python列表(List)是Python中最常用的数据结构之一,它是一个有序、可变的序列,可以存储任意类型的元素。下面我将从多个维度全面总结列表的用法,并通过丰富的实例进行说明。
一、列表基础操作
1. 列表创建与基本特性
列表可以通过方括号[]或list()构造函数创建:
python
# 创建空列表
empty_list = []
empty_list2 = list()
# 创建包含元素的列表
numbers = [1, 2, 3, 4, 5]
mixed_list = [1, "hello", 3.14, True]
nested_list = [[1, 2], [3, 4], [5, 6]]
print(f"数字列表: {numbers}")
print(f"混合类型列表: {mixed_list}")
print(f"嵌套列表: {nested_list}")
2. 列表操作符
列表支持多种操作符,使得列表操作更加灵活:
| 操作符 | 说明 | 示例 |
|---|---|---|
+ |
列表拼接 | [1,2] + [3,4] = [1,2,3,4] |
* |
列表重复 | [1,2] * 3 = [1,2,1,2,1,2] |
in |
成员检测 | ` |
| 2 in [1,2,3] = True` | ||
not in |
非成员检测 | ` |
| 4 not in [1,2,3] = True` |
python
# 操作符实例演示
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 列表拼接
combined = list1 + list2
print(f"列表拼接: {combined}")
# 列表重复
repeated = list1 * 2
print(f"列表重复: {repeated}")
# 成员检测
print(f"元素2是否在列表中: {2 in list1}")
print(f"元素7是否不在列表中: {7 not in list1}")
二、列表内置函数详解
1. 查询与统计函数
len() - 获取列表长度
python
fruits = ['apple', 'banana', 'orange', 'grape']
length = len(fruits)
print(f"水果列表长度: {length}") # 输出: 4
max() / min() - 获取最大/最小值
python
numbers = [10, 5, 8, 12, 3]
print(f"最大值: {max(numbers)}") # 输出: 12
print(f"最小值: {min(numbers)}") # 输出: 3
count() - 统计元素出现次数
python
numbers = [1, 2, 2, 3, 2, 4, 2]
count_two = numbers.count(2)
print(f"数字2出现的次数: {count_two}") # 输出: 4
index() - 查找元素索引
index()方法用于查找元素在列表中第一次出现的索引位置:
python
fruits = ['apple', 'banana', 'orange', 'banana', 'grape']
# 查找元素索引
banana_index = fruits.index('banana')
print(f"香蕉第一次出现的索引: {banana_index}") # 输出: 1
# 在指定范围内查找
banana_index_range = fruits.index('banana', 2, 4)
print(f"在索引2-4范围内查找香蕉: {banana_index_range}") # 输出: 3
# 处理元素不存在的情况
try:
lemon_index = fruits.index('lemon')
except ValueError as e:
print(f"查找不存在的元素会报错: {e}")
2. 元素操作函数
append() - 末尾添加元素
python
numbers = [1, 2, 3]
numbers.append(4)
print(f"添加元素后的列表: {numbers}") # 输出: [1, 2, 3, 4]
insert() - 指定位置插入元素
insert()方法可以在列表的指定位置插入元素:
python
numbers = [1, 2, 4, 5]
# 在索引2的位置插入元素3
numbers.insert(2, 3)
print(f"插入元素后的列表: {numbers}") # 输出: [1, 2, 3, 4, 5]
# 在开头插入元素
numbers.insert(0, 0)
print(f"在开头插入元素: {numbers}") # 输出: [0, 1, 2, 3, 4, 5]
# 在末尾插入元素(等同于append)
numbers.insert(len(numbers), 6)
print(f"在末尾插入元素: {numbers}") # 输出: [0, 1, 2, 3, 4, 5, 6]
extend() - 扩展列表
python
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(f"扩展后的列表: {list1}") # 输出: [1, 2, 3, 4, 5, 6]
3. 删除与修改函数
pop() - 删除并返回指定位置元素
python
fruits = ['apple', 'banana', 'orange', 'grape']
# 删除并返回最后一个元素
last_fruit = fruits.pop()
print(f"删除的元素: {last_fruit}") # 输出: grape
print(f"删除后的列表: {fruits}") # 输出: ['apple', 'banana', 'orange']
# 删除指定位置元素
second_fruit = fruits.pop(1)
print(f"删除索引1的元素: {second_fruit}") # 输出: banana
print(f"删除后的列表: {fruits}") # 输出: ['apple', 'orange']
remove() - 删除指定值的第一个匹配项
python
numbers = [1, 2, 3, 2, 4]
numbers.remove(2)
print(f"删除第一个2后的列表: {numbers}") # 输出: [1, 3, 2, 4]
del语句 - 删除元素或切片
del语句用于删除变量或列表中的元素:
python
numbers = [0, 1, 2, 3, 4, 5, 6]
# 删除单个元素
del numbers[0]
print(f"删除索引0后的列表: {numbers}") # 输出: [1, 2, 3, 4, 5, 6]
# 删除切片
del numbers[1:4]
print(f"删除切片[1:4]后的列表: {numbers}") # 输出: [1, 5, 6]
# 删除整个列表
del numbers
# print(numbers) # 这里会报错,因为numbers已被删除
clear() - 清空列表
python
numbers = [1, 2, 3, 4]
numbers.clear()
print(f"清空后的列表: {numbers}") # 输出: []
4. 排序与反转函数
sort() - 列表排序
python
numbers = [3, 1, 4, 1, 5, 9, 2]
# 升序排序
numbers.sort()
print(f"升序排序: {numbers}") # 输出: [1, 1, 2, 3, 4, 5, 9]
# 降序排序
numbers.sort(reverse=True)
print(f"降序排序: {numbers}") # 输出: [9, 5, 4, 3, 2, 1, 1]
# 字符串列表排序
fruits = ['banana', 'apple', 'orange', 'grape']
fruits.sort()
print(f"水果排序: {fruits}") # 输出: ['apple', 'banana', 'grape', 'orange']
reverse() - 列表反转
python
numbers = [1, 2, 3, 4, 5]
numbers.reverse()
print(f"反转后的列表: {numbers}") # 输出: [5, 4, 3, 2, 1]
sorted() - 返回排序后的新列表
python
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(f"原列表: {numbers}") # 输出: [3, 1, 4, 1, 5]
print(f"排序后的新列表: {sorted_numbers}") # 输出: [1, 1, 3, 4, 5]
5. 复制函数
copy() - 浅拷贝列表
python
original = [1, 2, [3, 4]]
copied = original.copy()
# 修改原始列表
original[0] = 100
original[2][0] = 300
print(f"原始列表: {original}") # 输出: [100, 2, [300, 4]]
print(f"拷贝列表: {copied}") # 输出: [1, 2, [300, 4]]
三、列表切片操作
列表切片是Python中非常强大的功能,可以方便地获取子列表:
python
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 基本切片
print(f"前3个元素: {numbers[:3]}") # 输出: [0, 1, 2]
print(f"索引3到6: {numbers[3:7]}") # 输出: [3, 4, 5, 6]
print(f"最后3个元素: {numbers[-3:]}") # 输出: [7, 8, 9]
# 步长切片
print(f"每隔一个元素: {numbers[::2]}") # 输出: [0, 2, 4, 6, 8]
print(f"反向切片: {numbers[::-1]}") # 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(f"从索引1开始每隔2个取一个: {numbers[1::2]}") # 输出: [1, 3, 5, 7, 9]
# 切片赋值(修改原列表)
numbers[2:5] = [20, 30, 40]
print(f"切片赋值后的列表: {numbers}") # 输出: [0, 1, 20, 30, 40, 5, 6, 7, 8, 9]
四、列表推导式
列表推导式提供了一种简洁创建列表的方法:
python
# 基本列表推导式
squares = [x**2 for x in range(10)]
print(f"0-9的平方: {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(f"偶数的平方: {even_squares}") # 输出: [0, 4, 16, 36, 64]
# 嵌套循环的列表推导式
pairs = [(x, y) for x in range(3) for y in range(3)]
print(f"坐标对: {pairs}") # 输出: [(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2)]
# 字符串处理
words = ['hello', 'world', 'python']
upper_words = [word.upper() for word in words]
print(f"大写单词: {upper_words}") # 输出: ['HELLO', 'WORLD', 'PYTHON']
五、列表与循环结合
1. 与for循环结合
列表经常与for循环结合使用,特别是与range()函数配合:
python
# 使用range遍历索引
fruits = ['apple', 'banana', 'orange']
for i in range(len(fruits)):
print(f"索引{i}: {fruits[i]}")
# 直接遍历元素
for fruit in fruits:
print(f"水果: {fruit}")
# 使用enumerate同时获取索引和值
for index, fruit in enumerate(fruits):
print(f"索引{index}的水果是: {fruit}")
2. range()函数在列表中的应用
range()函数用于生成整数序列,常用于列表操作:
python
# range函数基本用法
print("range(5):", list(range(5))) # 输出: [0, 1, 2, 3, 4]
print("range(1, 6):", list(range(1, 6))) # 输出: [1, 2, 3, 4, 5]
print("range(0, 10, 2):", list(range(0, 10, 2))) # 输出: [0, 2, 4, 6, 8]
# 在列表初始化中的应用
numbers = list(range(10))
print(f"0-9的数字列表: {numbers}")
# 在循环中的应用
for i in range(3):
print(f"第{i+1}次循环")
六、实际应用场景
1. 数据处理
python
# 成绩统计
scores = [85, 92, 78, 96, 88, 76, 95]
# 计算平均分
average = sum(scores) / len(scores)
print(f"平均分: {average:.2f}")
# 筛选优秀成绩(90分以上)
excellent_scores = [score for score in scores if score >= 90]
print(f"优秀成绩: {excellent_scores}")
# 成绩排序
sorted_scores = sorted(scores, reverse=True)
print(f"成绩排名: {sorted_scores}")
2. 队列和栈的实现
python
# 栈的实现(后进先出)
stack = []
stack.append(1) # 入栈
stack.append(2)
stack.append(3)
print(f"栈: {stack}")
popped = stack.pop() # 出栈
print(f"出栈元素: {popped}")
print(f"当前栈: {stack}")
# 队列的实现(先进先出)
from collections import deque
queue = deque([1, 2, 3])
queue.append(4) # 入队
print(f"队列: {queue}")
dequeued = queue.popleft() # 出队
print(f"出队元素: {dequeued}")
print(f"当前队列: {queue}")
3. 矩阵操作
python
# 二维列表表示矩阵
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 访问矩阵元素
print(f"矩阵第二行第三列: {matrix[1][2]}") # 输出: 6
# 矩阵转置
transpose = [[row[i] for row in matrix] for i in range(3)]
print("转置矩阵:")
for row in transpose:
print(row)
七、注意事项和最佳实践
1. 深浅拷贝问题
python
# 浅拷贝问题
original = [[1, 2], [3, 4]]
shallow_copy = original.copy()
# 修改嵌套列表会影响原列表
shallow_copy[0][0] = 100
print(f"原列表: {original}") # 输出: [[100, 2], [3, 4]]
print(f"浅拷贝: {shallow_copy}") # 输出: [[100, 2], [3, 4]]
# 深拷贝解决方案
import copy
deep_copy = copy.deepcopy(original)
deep_copy[0][0] = 999
print(f"原列表: {original}") # 输出: [[100, 2], [3, 4]]
print(f"深拷贝: {deep_copy}") # 输出: [[999, 2], [3, 4]]
2. 性能考虑
- 在列表开头插入元素(
insert(0, x))的时间复杂度为O(n) - 在列表末尾添加元素(
append(x))的时间复杂度为O(1) - 对于频繁在两端操作的情况,考虑使用
collections.deque
通过以上全面的总结和实例说明,我们可以看到Python列表是一个功能强大且灵活的数据结构,掌握其各种用法对于Python编程至关重要。列表的方法和操作可以组合使用,为解决各种实际问题提供了强大的工具。