python推导式(comprehensions)

python推导式(comprehensions

推导式(comprehensions:推导式,也有人翻译为解析式)用来快速完成一些常见功能,从而减轻了 Python程序员的负担。( 推导式的常用句法元素,见: https://docs.python.org/zh-cn/3/reference/expressions.html?highlight=comprehension#displays-for-lists-sets-and-dictionaries )

 

常见的推导式有:

列表推导式:可迭代对象为list

集体推导式:可迭代对象为set

字典推导式:可迭代对象为dict

 

先看列表推导式:

squares = [x * x for x in range(10)]

这个推导式生成一个列表,包含从 0到 9的所有整数的平方,参见下图:

如果想用纯 for 循环构建相同的列表,可能会这么写:

squares = []

for x in range(10):

    squares.append(x * x)

 

归纳之,会得到如下的模板:

values = [expression for item in collection]

上面的列表推导式“模板”等价于下面的 for 循环:

values = []

for item in collection:

    values.append(expression)

这里首先设置一个新的列表实例来接受输出值,然后遍历容器(collection)中的所有元素,用任意表达式处理每个元素,接着将各个结果添加到输出列表中。

现在再为这个模板添加一个更有用的功能,即使用条件来过滤元素。

squares = [x * x for x in range(10) 

              if x % 2 == 0]

这个列表推导式将得到从 0到 9所有偶数整数的平方组成的列表。它使用取模(%)运算符返回两数相除后的余数,在这个例子中用来测试一个数是否是偶数,产生的结果如下:

[0, 4, 16, 36, 64]

 

这个新的列表推导式的等价的 for 循环是:

squares = []

for x in range(10):

    if x % 2 == 0:

        even_squares.append(x * x)

 

下面是集合推导式:

{ x * x for x in range(-9, 10) } 

产生的结果如下:

{64, 1, 0, 36, 4, 9, 16, 81, 49, 25}

列表会保留元素的顺序,但 Python集合是无序类型。所以在将元素加到 set 容器时顺序是随机的。

又如:

squared = {x**2 for x in [1, 1, 2]}

print(squared)  #输出: {1, 4}

 

下面是字典推导式:

{ x: x * x for x in range(5) }

产生的结果如下:

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

 

 

Comprehensions — Python 3 Patterns, Recipes and Idioms (python-3-patterns-idioms-test.readthedocs.io)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值