美文网首页
列表展开式

列表展开式

作者: Black先森 | 来源:发表于2017-01-01 14:16 被阅读0次

    运行环境 python 2.7.12

    列表是Python内置的一种数据类型,Python拥有非常多的技巧方法,主要是为了简化代码,使Python的代码看起来更加简洁优雅。那么列表的生成式(或者成为列表展开式)就是一种操作列表的小技巧。

    1. 要生成一个从1到10的列表,使用range函数,但是如果要生成
      从1到10的平方数呢?当然我们也有办法。
    data = []
    for i in range(1, 11):
        data.append(i * i)
    
    print data
    #  [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    

    显然对于Python来说4行代码看起来费劲,Python的哲学是,总希望
    最优雅的实现这个问题,于是列表展开式

    >>> [i * i for i in range(1, 11)]
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    

    如果要得到前十个数中奇数的平方,只需要加上if判断即可

    >>> [i * i for i in range(1, 11) if i % 2 != 0]
     [1, 9, 25, 49, 81]
    

    当然列表内部元素也可以是列表或者元组等任意数据类型

    >>> [(m,n) for m in range(3) for n in "abc"]
    [(0, 'a'), (0, 'b'), (0, 'c'), (1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')]
    
    1. 接下来再来模拟一种排列组合类型,如果有两个字符串ABCXYZ我们要得到AX, AY,AZ,BX,BY,BZ ...一共9种类型。当然使用两个for
      的嵌套就可以了
    >>> [x + y for x in 'ABC' for y in 'XYZ'] # 每个元素为字符串
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
    >>> [(x, y) for x in 'ABC' for y in 'XYZ'] # 每个元素为元组
    [('A', 'X'),
     ('A', 'Y'),
     ('A', 'Z'),
     ('B', 'X'),
     ('B', 'Y'),
     ('B', 'Z'),
     ('C', 'X'),
     ('C', 'Y'),
     ('C', 'Z')]
     >>> [{x:y} for x in 'ABC' for y in 'XYZ'] # 每个元素为字典
    [{'A': 'X'},
     {'A': 'Y'},
     {'A': 'Z'},
     {'B': 'X'},
     {'B': 'Y'},
     {'B': 'Z'},
     {'C': 'X'},
     {'C': 'Y'},
     {'C': 'Z'}]
    
    
    1. 假设一个列表函数多种类型的元素,只需要筛选出数字类型的元素。
    >>> a = ['abx', '2bxs', 1, 2, 19, [1,2,3], '100', 12.6, 100.5]
    >>> [x for x in a if isinstance(x, (int, float))] # 筛选出int和float型的数据
    [1, 2, 19, 12.6, 100.5]
    
    1. 列表展开式也能包含我们自定义的函数。
    >>> [i for i in range(10) if (lambda x: x % 2 != 0)(i)]
    [1, 3, 5, 7, 9]
    

    相关文章

      网友评论

          本文标题:列表展开式

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