Python操作从列表理解和生成器表达式开始转载本文请联系PythonMind公众号。序列是指一组数据,按存储类型可分为容器序列和平面序列,按是否可修改可分为不可变序列和可变序列。容器序列和平序列容器序列存储对象引用,包括列表、元组、collections.deque。flatsequence存储对象的值,包括str、bytes、bytearray、memoryview和array.array。扁平序列的值是基本类型char、byte和numeric。不可变序列和可变序列不可变序列,包括tuple、str、bytes。可变序列,包括list、bytearray、array.array、collection.deque、memoryview。下图左边是父类,右边是子类。可见,可变序列继承自不可变序列,扩展了可变方法:列表推导。出来,比如我们要将字符串“abc”转换成一个新的列表[“a”,“b”,“c”],常规写法:symbols="abc"codes=[]forsymbolinsymbols:codes.append(symbol)print(codes)#["a","b","c"]使用for循环和列表追加方法。其实可以直接使用append方法:symbols="abc"codes=[symbolforsymbolinsymbols]这个叫列表推导,是比较Python化的写法。无论是书写效率还是可读性,listcomprehension都更好,可以说是构建列表的捷径。但它不能被滥用。总的原则是如果列表推导的代码超过两行,就应该考虑使用append。这不是规定,完全由你自己选择。笛卡尔积是指多个序列中元素的所有组合。我们使用列表理解来实现笛卡尔积:colors=["black","white"]sizes=["S","M","L"]tshirts=[(color,size)forcolorincolorsforsizeinsizes]一行代码是完毕!人生苦短,使用Python,列表理解很精彩,令人惊叹。注意这行代码有两个for循环,相当于:forcolorincolors:forsizeinsizes:运行结果为:[('black','S'),('black','M'),('black','L'),('white','S'),('white','M'),('white','L')]如果改变顺序:[(color,size)forcolorincolorsforsizeinsizes]等价于:forsizeinsizes:forcolorincolors:运算结果不同,观察第二个元素:[('black','S'),('white','S'),('black','M'),('white','M'),('black','L'),('white','L')]生成器表达式在接触生成器时一般会使用yield关键字,这似乎有点复杂。然而,它非常简单。生成器就像一个列表推导,但它用于生成其他类型的序列,例如元组:[]加上括号()就可以了。语法相似,但本质上有很大区别。让我们尝试用生成器表达式实现笛卡尔积,看看有什么变化:colors=["black","white"]sizes=["S","M","L"]tshirts=((color,size)forcolorincolorsforsizeinsizes)运行结果为:
