Python 推导式(Comprehensions)是一种精简而强大的语法,用于创建列表、字典和集合等数据结构。推导式允许在一行代码中根据现有的可迭代对象创建新的数据结构,这使得代码更加简洁和可读。在本文中,将介绍 Python 中的三种主要推导式:列表推导式、字典推导式和集合推导式。
列表推导式(List Comprehensions)
列表推导式用于从一个或多个可迭代对象中生成新的列表。
它的基本语法如下:
new_list = [expression for item in iterable]
其中:
-
expression
是一个表达式,用于定义新列表中的元素。 -
item
是可迭代对象中的每个元素。 -
iterable
是一个可迭代对象,例如列表、元组、字符串等。
下面是一些示例,演示了列表推导式的使用:
# 创建一个包含 0 到 9 的平方的列表
squares = [x**2 for x in range(10)]
# 从一个字符串中提取所有的大写字母
text = "Hello World"
uppercase_letters = [letter for letter in text if letter.isupper()]
# 创建一个包含偶数的列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [x for x in numbers if x % 2 == 0]
列表推导式还支持在表达式中使用条件语句,以根据条件过滤或转换元素。
# 使用条件过滤元素
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [x for x in numbers if x % 2 == 0]
字典推导式(Dictionary Comprehensions)
字典推导式用于从一个或多个可迭代对象中生成新的字典。
它的基本语法如下:
new_dict = {key_expression: value_expression for item in iterable}
其中:
-
key_expression
是一个表达式,用于定义字典中的键。 -
value_expression
是一个表达式,用于定义字典中的值。 -
item
是可迭代对象中的每个元素。 -
iterable
是一个可迭代对象,例如列表、元组、字符串等。
下面是一个示例,演示了字典推导式的使用:
# 创建一个将水果名称映射到其长度的字典
fruits = ["apple", "banana", "cherry"]
fruit_lengths = {fruit: len(fruit) for fruit in fruits}
# 使用条件过滤元素
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_squares = {x: x**2 for x in numbers if x % 2 == 0}
集合推导式(Set Comprehensions)
集合推导式用于从一个或多个可迭代对象中生成新的集合。
它的基本语法如下:
new_set = {expression for item in iterable}
其中:
-
expression
是一个表达式,用于定义集合中的元素。 -
item
是可迭代对象中的每个元素。 -
iterable
是一个可迭代对象,例如列表、元组、字符串等。
下面是一个示例,演示了集合推导式的使用:
# 创建一个包含一组整数的集合
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers_set = {x for x in numbers if x % 2 == 0}
# 从一个字符串中提取所有不重复的单词
text = "Hello World, Python is awesome!"
unique_words = {word.lower() for word in text.split()}
嵌套推导式(Nested Comprehensions)
Python 推导式也支持嵌套,允许在一个推导式中使用另一个推导式。这对于处理嵌套数据结构(例如列表中包含列表或字典中包含字典)非常有用。
嵌套列表推导式
嵌套列表推导式用于创建包含多个嵌套列表的列表。下面是一个示例,演示了如何使用嵌套列表推导式创建一个九九乘法表:
multiplication_table = [[x * y for y in range(1, 10)] for x in range(1, 10)]
这个推导式生成了一个包含 9 个列表的列表,每个列表包含了 1 到 9 的乘法结果。
嵌套字典推导式
嵌套字典推导式用于创建包含多个嵌套字典的字典。
下面是一个示例,演示了如何使用嵌套字典推导式创建一个包含学生信息的字典:
students = {
"Alice": {"age": 25, "major": "Math"},
"Bob": {"age": 22, "major": "History"},
"Charlie": {"age": 28, "major": "Physics"}
}
嵌套集合推导式
嵌套集合推导式用于创建包含多个嵌套集合的集合。下面是一个示例,演示了如何使用嵌套集合推导式创建包含不同水果购物清单的集合:
shopping_lists = {
{"apple", "banana", "cherry"},
{"banana", "grape", "kiwi"},
{"cherry", "kiwi", "orange"}
}
推导式的性能
Python 推导式通常比等效的循环更具性能优势,因为它们在解释器内部进行了优化。在处理大量数据时,推导式可以更快地生成结果。但在某些情况下,特别是处理非常复杂的推导式时,可能会降低可读性。因此,在编写代码时,需要权衡性能和可读性。
总结
在本文中,深入探讨了 Python 推导式,包括列表推导式、字典推导式、集合推导式以及嵌套推导式。推导式是一种强大的语法工具,可用于快速生成新的数据结构,减少了冗长的循环和条件语句。希望这篇文章帮助大家更全面地了解和应用 Python 推导式。