📜  推导式 - Python (1)

📅  最后修改于: 2023-12-03 15:25:56.729000             🧑  作者: Mango

推导式 - Python

在Python中,我们经常需要对一个数据集合进行一些操作,如过滤、变换、计算等等。使用传统的for循环方式,代码通常会比较冗长,并且可读性不高。这里介绍一种Python独有的语法--推导式(Comprehensions),可以简化集合操作的代码量,提高代码的可读性和简洁性。

Python支持以下几种推导式:

  • 列表推导式
  • 字典推导式
  • 集合推导式
  • 生成器推导式
列表推导式

列表推导式可以快速创建一个列表。

语法:

[expression for item in iterable if condition]

解释:

  • expression:表达式,可以包含变量和常量,用于计算列表中每个元素的值。
  • item:迭代变量,循环遍历iterable得到的每个值。
  • iterable:可迭代对象,如列表、元组、字符串等。
  • condition:条件表达式,用于过滤迭代变量的值(可选)。

示例:

# 使用for循环创建列表
squares = []
for i in range(1, 10):
    squares.append(i * i)
    
# 使用列表推导式创建列表
squares = [i * i for i in range(1, 10)]

# 带条件的列表推导式
even_squares = [i * i for i in range(1, 10) if i % 2 == 0]
字典推导式

字典推导式可以快速创建一个字典。

语法:

{key_expression: value_expression for item in iterable if condition}

解释:

  • key_expression:键的表达式。
  • value_expression:值的表达式。
  • item:迭代变量,循环遍历iterable得到的每个值。
  • iterable:可迭代对象,如列表、元组、字符串等。
  • condition:条件表达式,用于过滤迭代变量的值(可选)。

示例:

# 使用for循环创建字典
squares_dict = {}
for i in range(1, 10):
    squares_dict[i] = i * i
    
# 使用字典推导式创建字典
squares_dict = {i: i * i for i in range(1, 10)}

# 带条件的字典推导式
even_squares_dict = {i: i * i for i in range(1, 10) if i % 2 == 0}
集合推导式

集合推导式可以快速创建一个集合。

语法:

{expression for item in iterable if condition}

解释:

  • expression:表达式,可以包含变量和常量,用于计算集合中每个元素的值。
  • item:迭代变量,循环遍历iterable得到的每个值。
  • iterable:可迭代对象,如列表、元组、字符串等。
  • condition:条件表达式,用于过滤迭代变量的值(可选)。

示例:

# 使用for循环创建集合
squares_set = set()
for i in range(1, 10):
    squares_set.add(i * i)
    
# 使用集合推导式创建集合
squares_set = {i * i for i in range(1, 10)}

# 带条件的集合推导式
even_squares_set = {i * i for i in range(1, 10) if i % 2 == 0}
生成器推导式

生成器推导式可以快速创建一个生成器。

语法:

(expression for item in iterable if condition)

解释:

  • expression:表达式,可以包含变量和常量,用于计算生成器中每个元素的值。
  • item:迭代变量,循环遍历iterable得到的每个值。
  • iterable:可迭代对象,如列表、元组、字符串等。
  • condition:条件表达式,用于过滤迭代变量的值(可选)。

示例:

# 使用for循环创建生成器
def squares_gen():
    for i in range(1, 10):
        yield i * i

# 使用生成器推导式创建生成器
squares_gen = (i * i for i in range(1, 10))

# 带条件的生成器推导式
even_squares_gen = (i * i for i in range(1, 10) if i % 2 == 0)

推导式可以大大简化集合操作的代码量,提高代码的可读性和简洁性。但是,在使用推导式时要注意语句不要过长,否则会影响代码的可读性。