zoukankan      html  css  js  c++  java
  • python 列表推导式

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

    相当于squares map(lambda x: x**2, range(10)),但是更简洁和易读。
    傻逼才会用最古老的for循环方法去做这样的事情。

    列表推导式由括号括起来,

    括号里面包含一个表达式,

    表达式后面跟着一个for语句,

    后面还可以接零个或更多的forif语句。

    结果是一个新的列表,

    由表达式依据其后面的forif子句上下文计算而来的结果构成。

    例如,

    下面的 listcomp 组合两个列表中不相等的元素:

    >>>
    >>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
    [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]


    如果表达式是一个元组(例如前面示例中的 (x, y)),它必须带圆括号。
    [(x, x**2) for x in range(6)]
    [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]



    嵌套的列表推导式

    考虑下面由三个长度为 4 的列表组成的 3x4 矩阵:

    >>>
    >>> matrix = [
    ...     [1, 2, 3, 4],
    ...     [5, 6, 7, 8],
    ...     [9, 10, 11, 12],
    ... ]

    [[row[i] for row in matrix] for i in range(4)] 
    [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]



    在实际中,与复杂的控制流比起来,

    你应该更喜欢内置的函数。

    针对这种场景,使用 zip() 函数会更好:

    >>>
    >>> zip(*matrix)
    [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
     
  • 相关阅读:
    centos7 双网口绑定
    centos docker 修改默认存储路径
    Django 操作已经存在的数据库
    package ‘RPMM’ is not available (for R version 3.6.0)
    关于tornado的raise gen.Retuen()
    tornodo学习之路
    关于微信小程序登录机制
    关于微信小程序更新机制
    过渡结束事件
    移动端动效
  • 原文地址:https://www.cnblogs.com/hackerl/p/4783804.html
Copyright © 2011-2022 走看看