Python列表用法全解析及实战示例

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编程至关重要。列表的方法和操作可以组合使用,为解决各种实际问题提供了强大的工具。


参考来源

相关推荐
夫唯不争,故无尤也1 小时前
HTTP方法详解:GET、POST、PUT、DELETE
开发语言·windows·python
zh路西法2 小时前
【宇树机器人强化学习】(一):PPO算法的python实现与解析
python·深度学习·算法·机器学习·机器人
小钻风33662 小时前
Optional:告别NullPointerException的优雅方案
开发语言·python
科技块儿2 小时前
多语言技术栈如何共用IP离线库?Java、Python、Go 的加载实践
java·python·tcp/ip
fawubio_A2 小时前
毕业设计 深度学习卷积神经网络垃圾分类系统
python·cnn·毕业设计·毕设
与虾牵手2 小时前
大模型流式输出 Streaming API 完整教程:从原理到踩坑,一篇搞定
python·aigc·ai编程
高洁013 小时前
学习基于数字孪生的质量预测与控制
人工智能·python·深度学习·数据挖掘·transformer
xier_ran3 小时前
【第一周】关键词解释:倒数排名融合(Reciprocal Rank Fusion, RRF)算法
开发语言·python·算法
HelloWorld__来都来了3 小时前
如何用python爬取上市公司信息
开发语言·python