列表推导式是 Python 中一个非常强大且高效的工具,可以让你以一种简洁明了的方式生成复杂的列表。今天我们就一起来探索列表推导式的魔法,看看它是如何帮助我们高效地生成复杂数据结构的。
1. 基本列表推导式
列表推导式的基本语法是 [expression for item in iterable]
。这个简单的语法可以生成一个新的列表,其中的元素是根据 iterable
中的每个元素计算得到的。
# 生成一个包含 0 到 9 的平方的列表
squares = [x**2 for x in range(10)]
print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2. 添加条件语句
我们可以在列表推导式中添加条件语句,只选择满足条件的元素。
# 生成一个包含 0 到 9 中偶数的平方的列表
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # 输出: [0, 4, 16, 36, 64]
3. 多重循环
列表推导式还可以包含多个循环,生成更加复杂的列表。
# 生成一个包含两个列表中所有可能组合的列表
list1 = [1, 2, 3]
list2 = ['a', 'b']
combinations = [(x, y) for x in list1 for y in list2]
print(combinations) # 输出: [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]
4. 嵌套列表推导式
嵌套列表推导式可以生成嵌套的列表结构,非常适合处理多维数据。
# 生成一个 3x3 的矩阵,每个元素都是其行号和列号的和
matrix = [[i + j for j in range(3)] for i in range(3)]
print(matrix) # 输出: [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
5. 使用现有列表
我们可以使用现有的列表来生成新的列表,而不仅仅是从范围或固定值生成。
# 将字符串列表中的每个字符串转换为大写
words = ['apple', 'banana', 'cherry']
uppercase_words = [word.upper() for word in words]
print(uppercase_words) # 输出: ['APPLE', 'BANANA', 'CHERRY']
6. 复杂表达式
列表推导式中的表达式可以非常复杂,包括函数调用、条件表达式等。
# 生成一个包含 0 到 9 中每个数字的平方根(如果平方根是整数则保留,否则舍弃)
import math
sqrt_integers = [int(math.sqrt(x)) for x in range(10) if math.sqrt(x).is_integer()]
print(sqrt_integers) # 输出: [0, 1, 2, 3]
7. 条件表达式
我们可以在列表推导式中使用条件表达式来决定元素的值。
# 生成一个包含 0 到 9 中每个数字的绝对值
abs_values = [x if x >= 0 else -x for x in range(-5, 5)]
print(abs_values) # 输出: [5, 4, 3, 2, 1, 0, 1, 2, 3, 4]
8. 生成字典和集合
列表推导式不仅限于生成列表,还可以生成字典和集合。
# 生成一个字典,键是 0 到 9 的数字,值是它们的平方
squares_dict = {x: x**2 for x in range(10)}
print(squares_dict) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
# 生成一个集合,包含 0 到 9 中每个数字的平方
squares_set = {x**2 for x in range(10)}
print(squares_set) # 输出: {0, 1, 64, 4, 36, 9, 16, 81, 49, 25}
9. 实战案例:生成复杂的嵌套数据结构
假设我们需要生成一个包含多个用户信息的嵌套列表,每个用户有姓名、年龄和城市。我们可以使用列表推导式来简化这个过程。
# 用户信息列表
users = [
{'name': 'Alice', 'age': 25, 'city': 'New York'},
{'name': 'Bob', 'age': 30, 'city': 'Los Angeles'},
{'name': 'Charlie', 'age': 35, 'city': 'Chicago'}
]
# 生成一个嵌套列表,每个子列表包含用户的姓名、年龄和城市
user_info = [[user['name'], user['age'], user['city']] for user in users]
print(user_info)
# 输出: [['Alice', 25, 'New York'], ['Bob', 30, 'Los Angeles'], ['Charlie', 35, 'Chicago']]
10. 总结
通过本文的学习,我们了解了列表推导式的多种用法,包括基本语法、条件语句、多重循环、嵌套列表推导式、复杂表达式、条件表达式以及生成字典和集合。列表推导式不仅可以简化代码,提高可读性,还能显著提升程序的性能。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!
付费合集推荐
文末福利
公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。