Python 骚操作从列表推导和生成器表达式开始
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列。 容器序列与扁平序列 容器序列存放的是对象的引用,包括list、tuple、collections.deque。 扁平序列存放的是对象的值,包括str、bytes、bytearray、memoryview和array.array。 扁平序列的值是字符、字节和数值这种基础类型。 不可变序列与可变序列 不可变序列,包括tuple、str、bytes。 可变序列,包括list、bytearray、array.array、collection.deque、memoryview。 下图左边是父类,右边是子类,可以看出可变序列是从不可变序列继承来的,扩展了可变方法: 列表推导 Python 语言魅力在于简洁,这能从最常见的创建列表体现出来,比如我们想把字符串"abc"转换成新列表["a", "b", "c"],常规写法: symbols = "abc" codes = [] for symbol in symbols: codes.append(symbol) print(codes) # ["a", "b", "c"] 用到了 for 循环和列表 append 方法。实际上可以不用 append 方法,直接: symbols = "abc" codes = [symbol for symbol in symbols] 这叫做列表推导,是更加 Pythonic 的写法。 无论是编写效率还是可阅读性,列表推导都更胜一筹,可以说是构建列表的快捷方式。但是不能滥用,通用原则是,如果列表推导的代码超过了两行,就要考虑用 append 了。这不是规定,完全可以凭借自我喜好来选择。 笛卡尔积是指多个序列中元素所有组合,我们用列表推导来实现笛卡尔积: colors = ["black", "white"] sizes = ["S", "M", "L"] tshirts = [(color, size) for color in colors for size in sizes] 一行代码搞定!Life is short,use Python,list comprehension is wonderful,amazing。 ...