Python中的理解
Python中的理解为我们提供了一种使用已经定义的序列来构造新序列(如列表、集合、字典等)的简短方法。 Python支持以下 4 种类型的推导:
- 列出理解
- 字典理解
- 设置理解
- 生成器理解
列表理解:
List Comprehensions 提供了一种创建新列表的优雅方式。以下是列表推导的基本结构:
output_list = [output_exp for var in input_list if (var satisfies this condition)]
请注意,列表推导可能包含也可能不包含 if 条件。列表推导可以包含多个for (嵌套列表推导)。
示例 #1:假设我们要创建一个输出列表,其中仅包含输入列表中存在的偶数。让我们看看如何使用for 循环和列表推导来做到这一点,并决定哪种方法更适合。
# Constructing output list WITHOUT
# Using List comprehensions
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
output_list = []
# Using loop for constructing output list
for var in input_list:
if var % 2 == 0:
output_list.append(var)
print("Output List using for loop:", output_list)
输出:
Output List using for loop: [2, 4, 4, 6]
# Using List comprehensions
# for constructing output list
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
list_using_comp = [var for var in input_list if var % 2 == 0]
print("Output List using list comprehensions:",
list_using_comp)
输出:
Output List using list comprehensions: [2, 4, 4, 6]
示例 #2:假设我们要创建一个输出列表,其中包含从 1 到 9 的所有数字的平方。让我们看看如何使用 for 循环和列表推导来做到这一点。
# Constructing output list using for loop
output_list = []
for var in range(1, 10):
output_list.append(var ** 2)
print("Output List using for loop:", output_list)
输出:
Output List using for loop: [1, 4, 9, 16, 25, 36, 49, 64, 81]
# Constructing output list
# using list comprehension
list_using_comp = [var**2 for var in range(1, 10)]
print("Output List using list comprehension:",
list_using_comp)
输出:
Output List using list comprehension: [1, 4, 9, 16, 25, 36, 49, 64, 81]
字典理解:
扩展列表推导的概念,我们还可以使用字典推导创建字典。字典理解的基本结构如下所示。
output_dict = {key:value for (key, value) in iterable if (key, value satisfy this condition)}
示例 #1:假设我们要创建一个输出字典,其中仅包含输入列表中存在的奇数作为键和它们的立方体作为值。让我们看看如何使用 for 循环和字典理解来做到这一点。
input_list = [1, 2, 3, 4, 5, 6, 7]
output_dict = {}
# Using loop for constructing output dictionary
for var in input_list:
if var % 2 != 0:
output_dict[var] = var**3
print("Output Dictionary using for loop:",
output_dict )
输出:
Output Dictionary using for loop: {1: 1, 3: 27, 5: 125, 7: 343}
# Using Dictionary comprehensions
# for constructing output dictionary
input_list = [1,2,3,4,5,6,7]
dict_using_comp = {var:var ** 3 for var in input_list if var % 2 != 0}
print("Output Dictionary using dictionary comprehensions:",
dict_using_comp)
输出:
Output Dictionary using dictionary comprehensions: {1: 1, 3: 27, 5: 125, 7: 343}
示例 #2:给定两个包含州名及其对应首都的列表,构建一个字典,将州与各自的首都映射。让我们看看如何使用 for 循环和字典理解来做到这一点。
state = ['Gujarat', 'Maharashtra', 'Rajasthan']
capital = ['Gandhinagar', 'Mumbai', 'Jaipur']
output_dict = {}
# Using loop for constructing output dictionary
for (key, value) in zip(state, capital):
output_dict[key] = value
print("Output Dictionary using for loop:",
output_dict)
输出:
Output Dictionary using for loop: {'Gujarat': 'Gandhinagar',
'Maharashtra': 'Mumbai',
'Rajasthan': 'Jaipur'}
# Using Dictionary comprehensions
# for constructing output dictionary
state = ['Gujarat', 'Maharashtra', 'Rajasthan']
capital = ['Gandhinagar', 'Mumbai', 'Jaipur']
dict_using_comp = {key:value for (key, value) in zip(state, capital)}
print("Output Dictionary using dictionary comprehensions:",
dict_using_comp)
输出:
Output Dictionary using dictionary comprehensions: {'Rajasthan': 'Jaipur',
'Maharashtra': 'Mumbai',
'Gujarat': 'Gandhinagar'}
设置理解:
集合推导与列表推导非常相似。它们之间的唯一区别是集合推导使用大括号{ }
。让我们看下面的例子来理解集合推导。
示例 #1:假设我们要创建一个输出集,其中仅包含输入列表中存在的偶数。请注意, set 将丢弃所有重复值。让我们看看如何使用 for 循环和集合推导来做到这一点。
input_list = [1, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7]
output_set = set()
# Using loop for constructing output set
for var in input_list:
if var % 2 == 0:
output_set.add(var)
print("Output Set using for loop:", output_set)
输出:
Output Set using for loop: {2, 4, 6}
# Using Set comprehensions
# for constructing output set
input_list = [1, 2, 3, 4, 4, 5, 6, 6, 6, 7, 7]
set_using_comp = {var for var in input_list if var % 2 == 0}
print("Output Set using set comprehensions:",
set_using_comp)
输出:
Output Set using set comprehensions: {2, 4, 6}
生成器理解:
生成器推导与列表推导非常相似。它们之间的一个区别是生成器推导使用圆括号,而列表推导使用方括号。它们之间的主要区别在于生成器不会为整个列表分配内存。相反,它们一个一个地生成每个值,这就是它们具有内存效率的原因。让我们看下面的例子来理解生成器理解:
input_list = [1, 2, 3, 4, 4, 5, 6, 7, 7]
output_gen = (var for var in input_list if var % 2 == 0)
print("Output values using generator comprehensions:", end = ' ')
for var in output_gen:
print(var, end = ' ')
输出:
Output values using generator comprehensions: 2 4 4 6