美文网首页Python
Python 炫技操作:推导式的五种写法

Python 炫技操作:推导式的五种写法

作者: 小老鼠Python零基础速学 | 来源:发表于2021-01-12 09:25 被阅读0次

    作者:写代码的明哥

    来源:Python编程时光

    推导式(英文名:comprehensions),也叫解析式,是Python的一种独有特性。

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

    总共有四种推导式:

    列表(list)推导式

    字典(dict)推导式

    集合(set)推导式

    生成器推导式

    1. 列表推导式

    列表推导式的基本格式

    new_list = [expression for_loop_expressionifcondition]

    举个例子。

    我想找出一个数值列表中为偶数的元素,并组成新列表,通常不用列表推导式,可以这么写

    old_list = [0,1,2,3,4,5]

    new_list = []

    foriteminold_list:

    ifitem %2==0:

    new_list.append(item)

    print(new_list)# output: [0, 2, 4]

    一个简单的功能,写的代码倒是不少。

    如果使用了列表推导式,那就简洁多了,而且代码还变得更加易读了。

    >>> old_list = [0,1,2,3,4,5]

    >>>

    >>> new_list = [itemforiteminold_listifitem %2==0]

    >>> print(new_list)# output: [0, 2, 4]

    [0,2,4]

    2. 字典推导式

    列表推导式的基本格式,和 列表推导式相似,只是把 [] 改成了 {},并且组成元素有两个:key 和 value,要用 key_expr: value_expr 表示。

    new_dict ={ key_expr: value_expr for_loop_expressionifcondition }

    举个例子。

    我想从一个包含所有学生成绩信息的字典中,找出数学考满分的同学。

    old_student_score_info = {

    "Jack": {

    "chinese":87,

    "math":92,

    "english":78

    },

    "Tom": {

    "chinese":92,

    "math":100,

    "english":89

    }

    }

    new_student_score_info = {name: scoresforname, scoresinold_student_score_info.items()ifscores["math"] ==100}

    print(new_student_score_info)

    # output: {'Tom': {'chinese': 92, 'math': 100, 'english': 89}}

    3. 集合推导式

    集合推导式跟列表推导式也是类似的。唯一的区别在于它使用大括号{},组成元素也只要一个。

    基本格式

    new_set = { expr for_loop_expressionifcondition }

    举个例子

    我想把一个数值列表里的数进行去重处理

    >>> old_list = [0,0,0,1,2,3]

    >>>

    >>> new_set = {itemforiteminold_list}

    >>> print(new_set)

    {0,1,2,3}

    4. 生成器推导式

    生成器推导式跟列表推导式,非常的像,只是把 [] 换成了 ()

    列表推导式:生成的是新的列表

    生成器推导式:生成的是一个生成器

    直接上案例了,找出一个数值列表中所有的偶数

    >>> old_list = [0,1,2,3,4,5]

    >>> new_list = (itemforiteminold_listifitem %2==0)

    >>> new_list

     at0x10292df10>

    >>> next(new_list)

    0

    >>> next(new_list)

    2

    5. 嵌套推导式

    for 循环可以有两层,甚至更多层,同样的,上面所有的推导式,其实都可以写成嵌套的多层推导式。

    但建议最多嵌套两层,最多的话,代码就会变得非常难以理解。

    举个例子。

    我想打印一个乘法表,使用两个for可以这样写

    foriinrange(1,10):

    forjinrange(1, i+1):

    print('{}x{}={}\t'.format(j, i, i*j), end='')

    print("")

    输出如下

    1x1=1

    1x2=22x2=4

    1x3=32x3=63x3=9

    1x4=42x4=83x4=124x4=16

    1x5=52x5=103x5=154x5=205x5=25

    1x6=62x6=123x6=184x6=245x6=306x6=36

    1x7=72x7=143x7=214x7=285x7=356x7=427x7=49

    1x8=82x8=163x8=244x8=325x8=406x8=487x8=568x8=64

    1x9=92x9=183x9=274x9=365x9=456x9=547x9=638x9=729x9=81

    如果使用嵌套的列表推导式,可以这么写

    >>> print('\n'.join([' '.join(['%2d *%2d = %2d'% (col, row, col * row)forcolinrange(1, row +1)])forrowinrange(1,10)]))

    1*1=1

    1*2=22*2=4

    1*3=32*3=63*3=9

    1*4=42*4=83*4=124*4=16

    1*5=52*5=103*5=154*5=205*5=25

    1*6=62*6=123*6=184*6=245*6=306*6=36

    1*7=72*7=143*7=214*7=285*7=356*7=427*7=49

    1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64

    1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81

    相关文章

      网友评论

        本文标题:Python 炫技操作:推导式的五种写法

        本文链接:https://www.haomeiwen.com/subject/ebrsaktx.html