Python推导式和生成器表达式

Python推导式

Python推导式是一种可以从一个数据序列构建另一个新的数据序列的结构体。

除了列表推导式 (list comprehension) 以外,还有字典(dict)、集合(set)推导式。它们的语法格式如下:

# 列表:使用方括号
[expression for item in iterable if condition]

# 字典:使用花括号 `{}` 和提供键值对
{ key_expr: value_expr for value in collection if condition }

#集合:使用花括号 `{}`,但只包含单个表达式
{ expression for item in Sequence if conditional }

示例如下:

squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares)
# 结果: [0, 4, 16, 36, 64]

squares_dict = {x: x**2 for x in range(10) if x % 2 == 0}
print(squares_dict)
# 结果: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

squares_set = {x**2 for x in range(10) if x % 2 == 0}
print(squares_set)
# 结果: {0, 64, 4, 36, 16}

生成器表达式

生成器表达式(generator expression) 与列表推导式类似,但它会返回一个生成器对象。生成器对象是惰性求值的,只有在迭代时才会计算出每一个值,节省内存。

语法为:

(expression for item in iterable if condition)

注意:生成器表达式使用的是圆括号。

由于语法结构类似,有些地方会把生成器表达式称为“元组推导式”,或者把两者混为一谈。通常,所谓的“元组推导式”实际上是指生成器表达式。

如果按照Python推导式的定义,”元组推导式“应该返回一个元组,但实际输出结果是一个生成器对象。

示例:

squares_gen = (x**2 for x in range(10) if x % 2 == 0)
print(squares_gen)
# 结果: <generator object <genexpr> at 0x7d1915779770>

在上述示例中,生成器表达式返回一个生成器对象,而不是元组。

元组构造器:

如果想要生成元组,而不是生成器对象,可以结合生成器表达式和tuple()构造函数:

squares_tuple = tuple(x**2 for x in range(10) if x % 2 == 0)
# 结果: (0, 4, 16, 36, 64)

总结来说,生成器表达式用于惰性求值和节省内存,而“元组推导式”并不存在,生成元组需结合生成器表达式与tuple()函数

小结

# 列表推导式
list_comprehension = [expression for item in iterable if condition]

# 字典推导式
dict_comprehension = {key_expr: value_expr for item in iterable if condition}

# 集合推导式
set_comprehension = {expression for item in iterable if condition}

# 生成器表达式
generator_expression = (expression for item in iterable if condition)

# 生成元组
tuple_from_generator = tuple(expression for item in iterable if condition)
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值