当我们需要创建一个列表、字典或集合等Python数据结构的时候,通常使用Python解析式 (comprehension)来快速而简洁地构建这些数据结构。
- 列表解析式
列表解析式用来创建一个新列表,基于某个数据源(通常是一个可迭代对象),并使用自定义的表达式来创造新元素。以下是标准的列表解析式语法结构:
new_list = [expression for item in iterable if condition]
在这个结构中,expression
是用来根据每个 item
,生成新元素的表达式。 iterable
是用来在循环中提供 item
的序列(例如,列表、元组等)。此外,我们可以使用 if
来添加额外的条件,用来过滤掉不想要的元素。下面是一些示例:
# 创建一个由1到10的奇数组成的列表
odd_numbers = [x for x in range(1, 11) if x % 2 == 1]
print(odd_numbers) # [1,3,5,7,9]
# 创建一个所有元素都为1到10的平方的列表
squares = [x*x for x in range(1, 11)]
print(squares) # [1,4,9,16,25,36,49,64,81,100]
# 创建一个字符串列表,其中每个字符串都是大写
fruits = ['apple', 'banana', 'cherry']
uppercase_fruits = [fruit.upper() for fruit in fruits]
print(uppercase_fruits) # ['APPLE', 'BANANA', 'CHERRY']
在以上示例中,第一个列表解析式根据 if
语句生成了一个奇数列表。 第二个示例则生成1到10数字的平方列表。 第三个解析式根据 for
语句来循环遍历了水果列表,并创建了一个新的字符串列表,其中每个单词都是大写的。
- 字典解析式
字典解析式被用来创造一个新字典,基于某个数据源(通常是一个可迭代对象),并使用一个表达式生成新的键值对。以下是标准的字典解析式语法结构:
new_dict = {key_expression: value_expression for item in iterable if condition}
在这个结构中 key_expression
会根据 item
生成新键,而 value_expression
会生成对应的键值。每个 item
都是 iterable
序列的一个元素。 if
条件语句可以选择性地忽略某些元素。以下是一些示例:
# 创建一个用来表述水果名字长度的字典
fruits = ['apple', 'banana', 'cherry']
fruit_lengths = {fruit: len(fruit) for fruit in fruits}
print(fruit_lengths) # {'apple': 5, 'banana': 6, 'cherry': 6}
# 创建一个根据元素出现次数的字典
colors = ['red', 'green', 'red', 'blue', 'green', 'red']
color_count = {color: colors.count(color) for color in colors}
print(color_count) # {'red': 3, 'green': 2, 'blue': 1}
以上示例中的第一个字典解析是一个用水果名称的字典,其中键是水果的名称、值是每个水果名称的长度。第二个是基于颜色列表创建一个字典,在其中每个键代表一个颜色、值为其出现的次数。
- 集合解析式
集合解析式用来创建一个新集合,基于某个数据源(通常是一个可迭代对象),并使用表达式来生成新元素。以下是标准的集合解析式语法结构:
new_set = {expression for item in iterable if condition}
在这个结构中,expression
是用来根据每个 item
,生成新元素的表达式。 iterable
是用来在循环中提供 item
的序列(例如,列表、元组等)。此外,我们可以使用 if
来添加额外的条件,用来过滤掉不想要的元素。以下是一个示例:
# 创建一个大小写无关、去重后的水果名集合
fruits = ['apple', 'banana', 'cherry', 'apple', 'CHERRY', 'banana']
unique_fruits = {fruit.lower() for fruit in fruits}
print(unique_fruits) # {'cherry', 'banana', 'apple'}
以上示例中的集合解析式生成一个由水果名称构成的无序集合,这个集合最终大小写无关,且不重复。
希望这些示例可以帮助理解 Python 解析式如何有效、快速地创建常见数据结构。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python 理解解析式 - Python技术站