Python中列表推导和生成器表达式如何使用(python,编程语言)

时间:2024-03-29 23:34:14 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :


序列

序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列。

容器序列与扁平序列

容器序列存放的是对象的引用,包括list、tuple、collections.deque。

扁平序列存放的是对象的值,包括str、bytes、bytearray、memoryview和array.array。

扁平序列的值是字符、字节和数值这种基础类型。

不可变序列与可变序列

不可变序列,包括tuple、str、bytes。

可变序列,包括list、bytearray、array.array、collection.deque、memoryview。

下图左边是父类,右边是子类,可以看出可变序列是从不可变序列继承来的,扩展了可变方法:

Python中列表推导和生成器表达式如何使用

列表推导

Python语言魅力在于简洁,这能从最常见的创建列表体现出来,比如我们想把字符串"abc"转换成新列表["a", "b", "c"],常规写法:

symbols="abc"codes=[]forsymbolinsymbols:codes.append(symbol)print(codes)#["a","b","c"]

用到了for循环和列表append方法。实际上可以不用append方法,直接:

symbols="abc"codes=[symbolforsymbolinsymbols]

这叫做列表推导,是更加Pythonic的写法。

无论是编写效率还是可阅读性,列表推导都更胜一筹,可以说是构建列表的快捷方式。但是不能滥用,通用原则是,如果列表推导的代码超过了两行,就要考虑用append了。这不是规定,完全可以凭借自我喜好来选择。

笛卡尔积是指多个序列中元素所有组合,我们用列表推导来实现笛卡尔积:

colors=["black","white"]sizes=["S","M","L"]tshirts=[(color,size)forcolorincolorsforsizeinsizes]

一行代码搞定!Life is short,use Python,list comprehension is wonderful,amazing。

注意这行代码有两个for循环,等价于:

forcolorincolors:forsizeinsizes:

运行结果是:

[('black','S'),('black','M'),('black','L'),('white','S'),('white','M'),('white','L')]

如果换一下顺序:

[(color,size)forcolorincolorsforsizeinsizes]

等价于:

forsizeinsizes:forcolorincolors:

运行结果是不同的,观察第2个元素:

[('black','S'),('white','S'),('black','M'),('white','M'),('black','L'),('white','L')]

生成器表达式

一般接触到生成器时,都要讲yield关键字,看似有点复杂,然而却很简单,生成器就像列表推导一样,只不过是用来生成其他类型序列的,比如元组:

symbols="abc"codes=(symbolforsymbolinsymbols)

它的语法非常简单,把列表推导的中括号[]换成小括号(),就可以了。

语法相似,本质上却有很大区别,我们试着用生成器表达式来实现笛卡尔积,看看会有什么变化:

colors=["black","white"]sizes=["S","M","L"]tshirts=((color,size)forcolorincolorsforsizeinsizes)

运行结果是:

<generatorobject<genexpr>at0x000001FD57D2DB30>

generator object,结果是一个生成器对象。因为生成器表达式在每次迭代时才会逐个产出元素,所以这里的结果并不是已经创建好的元组。列表推导才会一次性产生新列表所有元素。

通过迭代把生成器表达式结果输出:

fortshirtintshirts:print(tshirt)
('black','S')('white','S')('black','M')('white','M')('black','L')('white','L')

生成器表达式可以提升程序性能,比如要计算两个各有1000个元素的列表的笛卡尔积,生成器表达式可以帮忙省掉运行for循环的开销,即一个包含100万个元素的列表。

看完上述内容,你们掌握Python中列表推导和生成器表达式如何使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Python中列表推导和生成器表达式如何使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何使用设计模式的外观模式下一篇:

9 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18