python推导式

        python推导式(解析式)是可以从一个数据序列构建另一个新的数据序列的结构体,是python特有的一种特性,是通过cpython实现的,其效率比for循环要快,所以如果不是特别复杂的表达式集合建议使用推导式,简洁、高效。python目前有四种推导式,分别是列表推导式、字典推导式、集合推导式和生成器推导式。

        1、列表推导式:

        例如python推导式求两列表内对应元素的和:

>>> lst1 = [1, 2, 3, 4, 5]
>>> lst2 = [6, 7, 8, 9, 10]
>>> lst = [lst1[i]+lst2[i] for i in range(0, len(lst1))]
>>> lst
[7, 9, 11, 13, 15]
>>> 

        python推导式求100以内的质数。温习下,质数即素数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数:

>>> from math import sqrt
>>> n = [i for i in range(2, 100) if 0 not in [i % j for j in range(2, int(sqrt(i)+1))]]
>>> n
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
>>> 

        2、字典推导式:

>>> m = {i : (i%2==0) and (i%3==0) for i in range(0, 30)}
>>> m
{0: True, 1: False, 2: False, 3: False, 4: False, 5: False, 6: True, 7: False, 8: False, 9: False, 10: False, 11: False, 12: True, 13: False, 14: False, 15: False, 16: False, 17: False, 18: True, 19: False, 20: False, 21: False, 22: False, 23: False, 24: True, 25: False, 26: False, 27: False, 28: False, 29: False}
>>> 

        3、集合推导式:[]为列表推导式,换成{}则为集合推导式。

>>> lst
[7, 9, 11, 13, 15]
>>> lst.append(15)
>>> lst
[7, 9, 11, 13, 15, 15]
>>> s = {i+10 for i in lst}
>>> type(s)
<class 'set'>
>>> s
{17, 19, 21, 23, 25}
>>> 

        4、生成器推导式:()为生成器推导式,注意,结果是一个生成器,不是元组,如果需要,可以用tuple()和list()方法转成元组和列表。下面还是已求100以内的质数为例:

>>> n = (i for i in range(2, 100) if 0 not in [i % j for j in range(2, int(sqrt(i)+1))])
>>> type(n)
<class 'generator'>
>>> n.__next__()
2
>>> n.__next__()
3
>>> n.__next__()
5
>>> n.__next__()
7
>>> n.__next__()
11
>>> n1 = tuple(n)  # 把生成器n剩余的部分转换成元组
>>> n  # 生成器n已经用完了
<generator object <genexpr> at 0x0000000002E2E410>
>>> n.__next__()
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    n.__next__()
StopIteration
>>> 
>>> type(n1)
<class 'tuple'>
>>> n1
(13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97)
>>> 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值