dede双语网站,贵阳搜索引擎排名推广,建设网站怎么备案,文库网站建设1. 推导式概念 Python推导式#xff08;comprehensions#xff09;是一种简洁而强大的语法#xff0c;用于从已存在的数据#xff08;列表、元组、集合、字典等#xff09;中创建新的数据结构。推导式包括#xff1a;
列表推导式元组推导式字典推导式集合推导式
2. 列表…
1. 推导式概念 Python推导式comprehensions是一种简洁而强大的语法用于从已存在的数据列表、元组、集合、字典等中创建新的数据结构。推导式包括
列表推导式元组推导式字典推导式集合推导式
2. 列表推导式 列表推导式创建列表的方式更简洁。常见的用法为对序列或可迭代对象中的每个元素应用某种操作用生成的结果创建新的列表或用满足特定条件的元素创建子序列。 例如创建平方值的列表
squares []
for x in range(10):squares.append(x**2)
print(squares)这段代码创建或覆盖变量 x该变量在循环结束后仍然存在。 下述方法可以无副作用地计算平方列表 # 1第一种方式
squares list(map(lambda x : x**2 in range(10)))# 2) 第二种方式
squares [x**2 for x in range(10)]2.1 语法格式 列表推导式List comprehension是一种在一行代码中创建和操作列表的简洁方式。 它的基本语法形式如下
[expression for item in iterable if condition]expression是对 item的操作或表达式可以是有返回值的函数。 2.item是迭代变量表示可迭代对象中的每个元素。iterable是可迭代对象如列表、元组、字符串等。condition是一个可选的条件用于过滤元素。 注意列表推导式的方括号内包含以下内容一个表达式后面为一个 for 子句然后是零个或多个for或 if 子句。结果是由表达式依据 for 和if 子句求值计算而得出一个新列表。
[(x, y) for x in [1,2,3] for y in [3,1,4] if x ! y]
上述推导式等同于combs []for x in [1,2,3]:for y in [3,1,4]:if x ! y:combs.append((x, y))combs# 输出 [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]2.2 示例及应用 筛选和转换数据
列表推导式允许你根据特定的条件从一个列表中选择或转换元素从而创建一个新的列表。例如你可以过滤出所有的偶数或将列表中的字符串转换为大写。# 筛选偶数
even_numbers [x for x in range(10) if x % 2 0]
print(even_numbers)# 过滤出字符串列表中长度大于3的单词
words [python, is, awesome, and, fun]
long_words [word for word in words if len(word)3]
print(long_words)# 转换字符串为大写
words [hello, world, python]
upper_words [word.upper() for word in words]
print(upper_words)运行效果 生成序列
通过列表推导式你可以用一行代码生成各种序列如数字序列、字符序列等。# 生成平方序列
squares [x**2 for x in range(5)]
print(squares)# 生成字符序列
chars [char for char in python]
print(chars)运行效果 嵌套迭代
列表推导式支持嵌套可以用来创建嵌套结构的数据例如二维列表。# 创建二维列表
matrix [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)# 生成一个包含 3 行 4 列的二维列表每个元素都是其行索引和列索引的和
matrix_o [[row col for col in range(4)] for row in range(3)]
print(matrix_o)运行效果 使用复杂的表达式和嵌套函数from math import pi
[str(round(pi,i)) for i in range(1,6)] 运行效果 3. 元组推导式 在Python中元组推导式Tuple Comprehension是一种用于创建元组的紧凑语法。它的语法结构与列表推导式类似但使用圆括号而不是方括号[]。
3.1 语法格式
tuple_variable (expression for item in iterable if condition)1.expression 是生成元组元素的表达式。 2.item 是可迭代对象中的每个元素。 3.iterable是一个可迭代对象例如列表、字符串等。 4. condition是一个可选的条件用于过滤元素。
3.2 示例及应用 创建元组序列
当需要生成一个元组序列时元组推导式是一种简洁的方式。例如可以使用元组推导式创建包含某种规律的数字、字符串或其他元素的元组序列。# 生成包含平方数的元组序列
squares_tuple tuple(x**2 for x in range(5))
print(squares_tuple)运行效果 转换数据
当有一个可迭代的对象并希望将其转换为元组时可以使用元组推导式。这在处理数据时很常见。# 将字符串长度转换为元组
words [apple, banana, orange]
lengths_tuple tuple(len(word) for word in words)
print(lengths_tuple)运行效果 过滤数据通过添加条件语句可以使用元组推导式从可迭代对象中选择特定的元素。# 生成包含偶数平方数的元组序列
even_squares_tuple tuple(x**2 for x in range(5) if x % 2 0)
print(even_squares_tuple)运行效果 函数返回多个值
在某些情况下可能希望从函数中返回多个值作为元组而元组推导式可以用于在函数中快速生成这样的元组。def get_coordinates():x_values [1, 2, 3]y_values [4, 5, 6]return tuple((x, y) for x, y in zip(x_values, y_values))coordinates get_coordinates()
print(coordinates)运行效果 3.3 与生成器表达式区别 元组推导式Tuple Comprehension和生成器表达式Generator Expression在语法上很相似但有一些关键的区别。以下是它们之间的主要区别
3.3.1 返回类型
元组推导式返回一个元组tuple。生成器表达式返回一个生成器对象generator。
3.3.2 语法
元组推导式使用圆括号 ()。生成器表达式使用圆括号 ()但是在语法上可以省略这与列表推导式不同。
# 元组推导式
tuple_comp tuple(x**2 for x in range(5))# 生成器表达式
generator_expr (x**2 for x in range(5))3.3.3 内存占用
元组推导式会生成一个完整的元组对象占用相应的内存。生成器表达式生成一个生成器对象它是一个惰性计算的序列只在需要时生成元素因此在内存上更为高效。
3.3.4 迭代方式
元组推导式一次性生成所有元素可以直接进行索引、切片等操作。生成器表达式是惰性的只在每次迭代时生成一个元素因此不能直接进行索引和切片等操作。 总体而言如果需要一个一次性的、完整的序列可以使用元组推导式而如果想要一个惰性计算的序列以节省内存可以使用生成器表达式。选择取决于具体需求。
4. 字典推导式 字典推导式Dictionary Comprehension是一种在一行代码中创建字典的方法类似于列表推导式。它允许你以简洁的方式从一个可迭代对象中创建一个字典.
4.1 语法格式 可以有0个或多个条件表达式根据具体的需求决定是否使用条件。
{key_expression: value_expression for item in iterable if condition}1.key_expression 是用于生成字典键的表达式。 2. value_expression 是用于生成字典值的表达式。 3.item 是可迭代对象中的每个元素。 4. if condition是一个可选的条件表达式用于过滤元素。
4.2 示例及应用 字典推导式在许多场景下都是一种方便且简洁的方式来创建和操作字典。以下是一些常见的字典推导式的应用场景 转换数据格式
当有一个可迭代对象想要将其转换为字典形式时字典推导式是一种便捷的方式。
例如将元组列表转换为字典tuple_list [(a, 1), (b, 2), (c, 3)]
my_dict {key: value for key, value in tuple_list}
print(tuple_list)运行效果 过滤数据
通过在字典推导式中添加条件表达式可以过滤可迭代对象的元素从而创建一个满足特定条件的字典。
例如只选择某个范围内的元素original_dict {a: 1, b: 2, c: 3, d: 4}
filtered_dict {key: value for key, value in original_dict.items() if value 2}
print(filtered_dict)运行效果 键或值的转换
可以使用字典推导式来对字典的键或值进行某种转换。
例如将字典的键和值交换original_dict {a: 1, b: 2, c: 3}
swapped_dict {value: key for key, value in original_dict.items()}
print(swapped_dict)运行效果 处理嵌套结构
当有一个嵌套的可迭代对象想要将其展平为字典时字典推导式也很有用。
例如展平嵌套的字典nested_dict {a: {x: 1, y: 2}, b: {x: 3, y: 4}}
flattened_dict {outer_key: inner_value for outer_key, inner_dict in nested_dict.items() for inner_key, inner_value in inner_dict.items()}
print(flattened_dict)运行效果 默认值处理
在字典推导式中可以使用字典的 get 方法或 default 关键字处理不存在的键从而设置默认值。这在构建字典时非常有用。original_dict {a: 1, b: 2, c: 3}
keys [a, b, c]
default_value 0
my_dict {key: original_dict.get(key, default_value) for key in keys}
print(my_dict)运行效果 5. 集合推导式 在Python中可以使用集合推导式来创建集合。集合推导式的语法与列表推导式类似但是使用大括号{} 表示集合。
5.1 语法格式
{expression for item in iterable if condition}expression是一个表达式用于计算集合中的元素。 2.item 是可迭代对象如列表、元组等中的每个元素。 3.iterable 是一个可迭代对象例如 range(1, 11)。condition是一个可选的条件用于筛选满足条件的元素。
5.2 示例及应用 集合推导式在Python中是一个强大而灵活的工具适用于多种应用场景。以下是一些常见的集合推导式的应用场景 过滤数据
可以使用集合推导式从一组数据中筛选出满足特定条件的元素。
例如从一个列表中选择所有大于某个阈值的数字。numbers [1, 5, 8, 10, 15, 20]
filtered_numbers {x for x in numbers if x 10}
print(filtered_numbers)运行效果 映射转换
使用集合推导式可以对数据进行转换生成一个新的集合。例
如将字符串列表转换为它们的长度集合。words [apple, banana, orange]
word_lengths {len(word) for word in words}
print(word_lengths)运行效果 去重
创建一个不包含重复元素的集合。这对于从列表或其他可迭代对象中移除重复项非常有用。numbers_with_duplicates [1, 2, 2, 3, 4, 4, 5]
unique_numbers {x for x in numbers_with_duplicates}
print(unique_numbers)运行效果 集合运算
使用集合推导式进行集合运算如并集、交集等。
例如找到两个集合的交集。set1 {1, 2, 3, 4, 5}
set2 {3, 4, 5, 6, 7}
intersection {x for x in set1 if x in set2}
print(intersection)运行效果 条件化处理
在集合推导式中可以根据特定条件对元素进行处理。
例如将列表中的奇数平方加倍。numbers [1, 2, 3, 4, 5]
doubled_odd_squares {x**2 * 2 for x in numbers if x % 2 ! 0}
print(doubled_odd_squares)运行效果 6. 使用推导式的优点 简洁性 推导式允许以一种紧凑的方式表示数据转换和过滤减少了冗余的代码行数。这使得代码更加简洁、清晰同时减少了错误的可能性。 可读性 推导式提高了代码的可读性尤其是对于简单的转换和过滤操作。它们可以帮助将复杂的操作用一行或几行代码清晰地表达出来使得代码更易于理解。 效率 推导式通常比传统的迭代方式更高效。它们背后的实现在一些情况下可以提供更好的性能因为它们是由底层的高效数据结构实现的。 功能性 推导式支持丰富的功能包括条件过滤、多个迭代器的组合、元素的映射转换等。这使得推导式成为一种灵活而强大的工具适用于各种不同的场景。 一致性 推导式提供了一种统一的语法结构使得在不同的数据类型列表、集合、字典等上进行转换和过滤变得一致。这种一致性使得代码更易于维护和修改。 减少临时变量 使用推导式可以减少在代码中引入不必要的临时变量。这有助于保持代码的简洁性和可读性。 支持多种数据结构 不仅可以在列表中使用推导式还可以在集合、字典等数据结构上使用扩展了推导式的适用范围。
7. 参考
参考列表 官网https://docs.python.org/zh-cn/3/tutorial/datastructures.html#list-comprehensions 菜鸟教程https://www.runoob.com/python3/python-comprehensions.html