zoukankan      html  css  js  c++  java
  • Python学习笔记:列表推导式

    一、介绍

    Python 中有个语法糖(syntactic sugar),就是 list comprehension,即“列表推导式”。

    同样适用于 dictset 等一系列可迭代的数据结构。

    • 使用语法
    out_list = [x for x in list if express_condition]
    

    其中的 if 条件判断语句可有可无。

    二、range函数

    Pythonrange 函数可以用来创建一个整数列表,一般用在 for 循环中。

    • 使用语法
    range(start, stop, [, step])
    start -- 开始
    stop -- 结束(不包含)
    setp -- 步长
    

    列表推导式是通过一个可迭代对象来生成列表,range 是列表推导式中最常用的可迭代对象,是精髓之一。

    三、实操

    1.列表推导式

    • 列表推导式会遍历可迭代对象,然后按照 for 前的表达式进行运算,生成最终的列表
    • 如果有 if 条件语句, for 遍历后紧跟着进行条件判断
    • 如果有多个 for 循环,则最终的数据数量为多个 for 循环的笛卡尔积
    • 可以进行嵌套的列表推导,与嵌套 for 循环的原理相同
    [x**2 for x in range(10)]
    # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    [x**2 for x in range(10) if x > 5]
    # [36, 49, 64, 81]
    
    [x for x in range(10) if x % 2 == 0]
    # [0, 2, 4, 6, 8]
    
    [(x, x**2) for x in range(5)]
    # [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]
    
    dict([(x, x**2) for x in range(5)])
    # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
    
    [(x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8]
    # [(5, 9), (7, 9), (9, 9)]
    
    a = [2,4,6]
    b = [4,3,-9]
    [a[i] + b[i] for i in range(len(a))]
    # [6, 7, -3]
    
    [x * y for x in [1,2,3] for y in [1,2,3]]
    # [1, 2, 3, 2, 4, 6, 3, 6, 9]
    
    li = [1,2,3,4]
    def mul2(x):
        return x*2
    [mul2(i) for i in li]
    # [2, 4, 6, 8]
    
    # 嵌套循环 展平矩阵
    matrix = [[1,2,3], [4,5,6], [7,8,9]]
    [i for row in matrix for i in row]
    # [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    2.字典(dict)和集合(set)推导式

    • 将字典key和value互换
    dic = {'a':10, 'b':20, 'c':30}
    {value: key for key, value in dic.items()} # 返回键值对
    # {10: 'a', 20: 'b', 30: 'c'}
    
    • 提取首字母
    words_list = ['apple', 'oppo', 'vivo', 'xiaomi']
    set(w[0] for w in words_list)
    # {'a', 'o', 'v', 'x'}
    

    集合是无序且不重复的,会自动去掉重复的元素。

    三、总结

    总的来说,就是把普通的多行 for 循环压缩成一行代码。

    这种压缩语法适用于列表、字典、集合等可迭代数据结构。

    • 代码可读性 只需要一行代码
    • 局部作用域 不存在变量泄露问题
    • 尽量保持简洁

    参考链接:Python的列表推导式

    参考链接:Python中的列表推导式

    参考链接:Python列表推导式

  • 相关阅读:
    PHP+Ajax手机移动端发红包实例
    PHP+Ajax点击加载更多列表数据实例
    Thinkphp带表情的评论回复实例
    PHP+Mysql查询上一篇和下一篇文章实例
    PHP通过session判断防止表单重复提交实例
    PHP+Ajax微信手机端九宫格抽奖实例
    PHP+Ajax+plupload无刷新上传头像代码
    PHP原生开发的各大音乐平台API接口
    js 获取浏览器高度和宽度值(多浏览器)(转)
    NPOI、MyXls、Aspose.Cells 导入导出Excel(转)
  • 原文地址:https://www.cnblogs.com/hider/p/15509427.html
Copyright © 2011-2022 走看看