Python之列表生成式、生成器、可迭代对象与迭代器

"""
Python之列表生成式、生成器、可迭代对象与迭代器
"""

"""
一、语法糖的概念
“语法糖”,从字面上看应该是一种语法。“糖”,可以理解为简单、简洁。其实我们也已经意识到,没有这些被称为“语法糖”的语法,我们也能实现相应的功能,而 “语法糖”使我们可以更加简洁、快速的实现这些功能。 只是Python解释器会把这些特定格式的语法翻译成原本那样复杂的代码逻辑而已,没有什么太高深的东西。
到目前为止,我们使用和介绍过的语法糖有:
if...else 三元表达式: 可以简化分支判断语句,如 x = y.lower() if isinstance(y, str) else y
with语句: 用于文件操作时,可以帮我们自动关闭文件对象,使代码变得简洁;
装饰器: 可以在不改变函数代码及函数调用方式的前提下,为函数增加增强性功能;
这里会再介绍两个:
列表生成式: 用于生成一个新的列表
生成器: 用于“惰性”地生成一个无限序列
"""
"""
二、列表生成式   
顾名思义,列表生成式就是一个用来生成列表的特定语法形式的表达式。
1.语法格式:
[exp for iter_var in iterable]
工作过程:
    1.迭代iterable中的每个元素;
    2.每次迭代都先把结果赋值给iter_var,然后通过exp得到一个新的计算值;
    3.最后把所有通过exp得到的计算值以一个新列表的形式返回。
2. 应用场景
应用列表生成式可以快速生成一个新的list。它最主要的应用场景是:根据已存在的可迭代对象推导出一个新的list。
"""
#3.实例演示
#实例1:生成一个从3到10的数字列表
print([x for x in range(3,11)])
#实例2:生成一个2n+1的数字列表,n为从3到11的数字
print([2*x+1 for x in range(3,11)])#必须写成2*x
#实例3:过滤出一个指定的数字列表中值大于20的元素
L=[3,7,11,14,19,33,26,57,99]
print([x for x in L if x >20])
#实例4:计算两个集合的全排列,并将结果作为保存至一个新的列表中
L1 = ['香蕉','苹果','橙子']
L2 = ['可乐','牛奶']
print([(x,y) for x in L1 for y in L2])
#实例5:将一个字典转换成由一组元组组成的列表,元组的格式为(key, value)
D = {'Tom': 15, 'Jerry': 18, 'Peter': 13}
print([(k,v) for k,v in D.items()])
"""
[3, 4, 5, 6, 7, 8, 9, 10]
[7, 9, 11, 13, 15, 17, 19, 21]
[33, 26, 57, 99]
[('香蕉', '可乐'), ('香蕉', '牛奶'), ('苹果', '可乐'), ('苹果', '牛奶'), ('橙子', '可乐'), ('橙子', '牛奶')]
[('Tom', 15), ('Jerry', 18), ('Peter', 13)]
"""
#4. 列表生成式与map()、filter()等高阶函数功能对比
#实例1:把一个列表中所有的字符串转换成小写,非字符串元素原样保留
L = ['TOM', 'Peter', 10, 'Jerry','12']
print([x.lower() if isinstance(x,str) else x  for x in L])
print(list(map(lambda x:x.lower() if isinstance(x,str) else x,L )))

#实例2:把一个列表中所有的字符串转换成小写,非字符串元素移除
L = ['TOM', 'Peter', 10, 'Jerry',"12"]
print([x.lower() for x in L if isinstance(x,str)])
print(list(map(lambda x:x.lower(),filter(lambda x: isinstance(x,str),L))))
#对于大部分需求来讲,使用列表生成式和使用高阶函数都能实现。但是map()和filter()等一些高阶函数在Python3中的返回值类型变成了Iteraotr(迭代器)对象(在Python2中的返回值类型为list),这对于那些元素数量很大或无限的可迭代对象来说显然是更合适的,因为可以避免不必要的内存空间浪费。
"""
['tom', 'peter', 10, 'jerry', '12']
['tom', 'peter', 10, 'jerry', '12']
['tom', 'peter', 'jerry', '12']
['tom', 'peter', 'jerry', '12']
"""

 

Python之列表生成式、生成器、可迭代对象与迭代器链接:https://www.cnblogs.com/yyds/p/6281453.html#4057203

python中yield的用法详解链接:https://blog.csdn.net/mieleizhi0522/article/details/82142856

 

posted on 2019-02-24 13:32  wzc521  阅读(116)  评论(0)    收藏  举报

导航