📜  Python中的理解

📅  最后修改于: 2022-05-13 01:55:20.801000             🧑  作者: Mango

Python中的理解

Python中的理解为我们提供了一种使用已经定义的序列来构造新序列(如列表、集合、字典等)的简短方法。 Python支持以下 4 种类型的推导:

  • 列出理解
  • 字典理解
  • 设置理解
  • 生成器理解

列表理解:

List Comprehensions 提供了一种创建新列表的优雅方式。以下是列表推导的基本结构:

请注意,列表推导可能包含也可能不包含 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]

字典理解:

扩展列表推导的概念,我们还可以使用字典推导创建字典。字典理解的基本结构如下所示。

示例 #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