(6)100天python从入门到拿捏《推导式》
推导式
Python 中的推导式是 Python 提供的一种简洁、优雅的语法,用于生成或操作集合如列表、字典、集合等。推导式通过简化循环和条件判断的写法,使得代码更加简洁易读。Python 中常见的推导式有:列表推导式、字典推导式、集合推导式 和 生成器推导式。
文章目录
- 推导式
- 1. 列表推导式
- 2. 字典推导式
- 3. 集合推导式
- 4. 元组推导式(生成器推导式)
- 5. 推导式的嵌套
- 6. 推导式的性能
- 总结
1. 列表推导式
列表推导式用于根据某种规则从现有的可迭代对象中生成新列表。它通常包含一个表达式和一个可迭代对象。
语法:
[expression for item in iterable if condition]
expression
:用于生成元素的表达式。item
:可迭代对象中的每个元素。iterable
:可以迭代的对象如列表、字符串等。condition
(可选):一个条件表达式,用于过滤列表中不符合条件的值。
示例
-
生成一个包含 0 到 9 的列表
numbers = [x for x in range(10)] print(numbers)
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-
生成一个包含偶数的列表
even_numbers = [x for x in range(10) if x % 2 == 0] print(even_numbers)
输出:
[0, 2, 4, 6, 8]
-
生成每个数字的平方
squares = [x ** 2 for x in range(10)] print(squares)
输出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2. 字典推导式
字典推导式用于根据某种规则从现有的数据生成新字典。它的基本语法与列表推导式类似,但每个元素需要包含键值对。
语法:
{key_expression: value_expression for item in iterable if condition}
key_expression
:键的生成规则。value_expression
:值的生成规则。item
:可迭代对象中的每个元素。
示例:
-
生成一个字典,其中键是数字,值是数字的平方
square_dict = {x: x ** 2 for x in range(5)} print(square_dict)
输出:
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
-
生成一个字典,过滤掉值小于 5 的项
number_dict = {x: x ** 2 for x in range(10) if x ** 2 >= 5} print(number_dict)
输出:
{3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
3. 集合推导式
集合推导式用于根据某种规则从现有的数据生成新集合。集合推导式的语法与列表推导式类似,但它生成的是集合,因此集合中的元素是唯一的。
语法:
{expression for item in iterable if condition}
示例:
-
生成一个包含 0 到 9 中所有偶数的集合
even_set = {x for x in range(10) if x % 2 == 0} print(even_set)
输出:
{0, 2, 4, 6, 8}
-
去除列表中的重复元素
numbers = [1, 2, 3, 4, 4, 5, 6, 6] unique_numbers = {x for x in numbers} print(unique_numbers)
输出:
{1, 2, 3, 4, 5, 6}
4. 元组推导式(生成器推导式)
生成器推导式与列表推导式类似,不同的是它生成的是一个生成器对象,而不是一个列表。生成器是惰性求值的,即只有在需要时才会生成值,因此在处理大数据时比列表推导式更加节省内存。
语法:
(expression for item in iterable if condition)
示例:
-
生成器推导式生成平方数
gen = (x ** 2 for x in range(10)) for num in gen:print(num)
输出:
0 1 4 9 16 25 36 49 64 81
-
生成器推导式的内存效率
生成器对象的好处在于它不会一次性将所有元素存储在内存中,而是按需生成值,因此对于大数据集来说非常节省内存。# 创建一个生成器 gen = (x for x in range(1000000))# 仅当需要时才计算和输出 print(next(gen)) # 输出:0 print(next(gen)) # 输出:1
5. 推导式的嵌套
推导式可以进行嵌套使用,特别是在处理多层嵌套的迭代结构时非常有用。
示例:
-
列表推导式嵌套
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flattened = [item for row in matrix for item in row] print(flattened)
输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
-
字典推导式嵌套
names = ["Alice", "Bob", "Charlie"] scores = [95, 85, 90] name_score_dict = {names[i]: scores[i] for i in range(len(names))} print(name_score_dict)
输出:
{'Alice': 95, 'Bob': 85, 'Charlie': 90}
6. 推导式的性能
推导式通常比使用显式的 for
循环更快。因为推导式是在一个内存块内完成所有操作,而 for
循环需要通过多次操作来逐步构建结果。因此,推导式在性能上通常更加高效。
总结
Python 中的推导式提供了一种非常优雅和高效的方式来生成或操作集合数据。它能够通过简洁的语法实现复杂的操作,从而提高代码的可读性和执行效率。
python学习专栏导航
(1)100天python从入门到拿捏《Python 3简介》
(2)100天python从入门到拿捏《python应用前景》
(3)100天python从入门到拿捏《数据类型》
(4)100天python从入门到拿捏《运算符》
(5)100天python从入门到拿捏《流程控制语句》