一、列表生成式
1.列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
(具体还是上代码解释吧)
print([100*a+10*b+c for a in range(1,10) for b in range(0,10) for c in range(1,10) if a==c])
#这句代码的意思就是把1000以内的个位数与百位数相同的数字填充到一个数组中并打印出来。
输出:[101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 404, 414, 424, 434, 444, 454, 464, 474, 484, 494, 505, 515, 525, 535, 545, 555, 565, 575, 585, 595, 606, 616, 626, 636, 646, 656, 666, 676, 686, 696, 707, 717, 727, 737, 747, 757, 767, 777, 787, 797, 808, 818, 828, 838, 848, 858, 868, 878, 888, 898, 909, 919, 929, 939, 949, 959, 969, 979, 989, 999]
我的理解就是把从数据源中把数据取出按照规则和条件过滤出来形成一个数组。
二、生成器
1.生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束。
2.创建生成器最近单的方法就是把列表生成式的[]变为()即可。内部表达式逻辑与列表生成器相同。
3.我们可以通过next()函数来不断打印出下一个计算结果,但如果超出范围会抛出StopIteration异常。我们可以用for循环来对生成器循环输出。
4.它的内部实现机制在于一个关键字yield,当我们每次调用next()方法时,遇到yield语句则返回,再次调用时则会从上一次yield语句返回处执行。
5.代码举例 打印杨辉三角形:
def triangles():
L=[1]
while True:
yield L
L.append(0)
L= [ L [ i - 1 ] + L [ i ] for i in range ( len(L) ) ]
n=0
for t in triangles():
print( t )
n=n+1
if n ==6:
break
输出:[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
三、迭代器
1.Iterable(可迭代对象):可以直接作用于for循环的对象;可以使用isinstance()判断一个对象是否是Iterable对象。
2.Iterator(迭代器对象):可以被next()函数调用并不断返回下一个值的对象称为;可以使用isinstance()判断一个对象是否是Iterator对象。
3.将可迭代对象(Iterable)对象转换为迭代器(Iterator)对象,使用iter()函数。