Python 列表生成式、生成器、迭代器

时间:2023-03-09 01:12:01
Python 列表生成式、生成器、迭代器

列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
... L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法

还可以使用两层循环,可以生成全排列

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

生成器

 for i in g:
print(i) def bar():
print("ok1")
count = yield 1
print(count) yield 2
b = bar() b.send(None) # 相当于next(b), c = b.send(None) c = 1 b.send("eeeee") # 执行时,进入函数,先对count传值, 然后返回yield 2 值为2

迭代器

生成器一定是迭代器

特点:

  1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
  2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问
  3. 访问到一半时不能往回退
  4. 便于循环比较大的数据集合,节省内存
for循环内部三件事
1.调用可迭代对象的iter方法,返回一个迭代器对象
2.调用迭代器对象的next方法
3.处理stopIteration
可迭代对象,对象有iter方法的是可迭代对象
什么是迭代器
1.有iter方法
2.有next方法