【python】推导式

在Python中,推导式(Comprehension)是一种简洁、高效的方式来创建列表(list)、集合(set)、字典(dict)和元组(tuple)等数据结构。推导式允许你在一行代码中创建这些数据结构,通过迭代一个或多个可迭代对象并应用某种函数或表达式。

一、列表推导式(List Comprehension)

格式

  1. 不带条件的列表推导式:
[expression for item in iterable]
  1. 带条件的列表推导式:
[expression for item in iterable if condition]

示例

  1. 不带条件的列表推导式:
# 创建一个包含0到4的平方的列表
squares = [x**2 for x in range(5)]
print(squares)  # 输出: [0, 1, 4, 9, 16]

# 创建一个包含列表中每个元素字符串形式的列表
words = ['apple', 'banana', 'cherry']
word_lengths = [len(word) for word in words]
print(word_lengths)  # 输出: [5, 6, 6]
  1. 带条件的列表推导式:
# 创建一个包含0到9中偶数的平方的列表
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # 输出: [0, 4, 16, 36, 64]

# 创建一个包含列表中所有偶数(字符串形式)的列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_numbers_str = [str(num) for num in numbers if num % 2 == 0]
print(even_numbers_str)  # 输出: ['2', '4', '6', '8']

嵌套列表推导式

嵌套列表推导式用于处理嵌套的可迭代对象,如列表的列表。

# 创建一个二维列表的扁平化列表
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [element for row in matrix for element in row]
print(flattened)  # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

列表推导式是 Python 中非常强大和灵活的特性,它允许你以简洁、易读的方式创建和操作列表。
当涉及到字典、集合和元组的推导式时,它们的语法与列表推导式相似,但有一些关键的区别。下面我将详细解释每种推导式的格式和示例。

二、字典推导式(Dict Comprehension)

字典推导式用于从可迭代对象(如列表、元组或另一个字典)中创建新的字典。

格式

{key_expr: value_expr for item in iterable if condition}

示例

# 从列表的元组中创建字典
items = [(1, 'apple'), (2, 'banana'), (3, 'cherry')]
fruit_dict = {k: v for k, v in items}
print(fruit_dict)  # 输出: {1: 'apple', 2: 'banana', 3: 'cherry'}

# 创建一个字典,其中键是0到4的数字,值是它们的平方(仅包含偶数键)
squares_dict = {i: i**2 for i in range(5) if i % 2 == 0}
print(squares_dict)  # 输出: {0: 0, 2: 4, 4: 16}

三、集合推导式(Set Comprehension)

集合推导式用于从可迭代对象中创建新的集合。集合中的元素是不重复的。

格式

{expr for item in iterable if condition}

示例

# 创建一个集合,包含0到9的平方(去重后)
squares_set = {x**2 for x in range(10)}
print(squares_set)  # 输出可能是: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}(但顺序可能不同)

# 创建一个集合,包含列表中所有的偶数
numbers = [1, 2, 2, 3, 4, 4, 5]
even_numbers_set = {x for x in numbers if x % 2 == 0}
print(even_numbers_set)  # 输出可能是: {2, 4}(但顺序可能不同)

四、元组推导式(实际上没有直接的元组推导式)

Python 没有直接的元组推导式语法,但可以使用生成器表达式和 tuple() 函数来间接地创建一个元组。

示例(使用生成器表达式和 tuple()):

# 创建一个包含0到4的平方的元组
squares_tuple = tuple(x**2 for x in range(5))
print(squares_tuple)  # 输出: (0, 1, 4, 9, 16)

# 创建一个包含列表中所有偶数的元组
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_numbers_tuple = tuple(x for x in numbers if x % 2 == 0)
print(even_numbers_tuple)  # 输出: (2, 4, 6, 8)

虽然这里使用了圆括号 (),但它们实际上是 tuple() 函数的调用语法,而不是元组推导式的语法。记住,圆括号在这里只是为了调用函数,而不是定义推导式。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值