对Python中的高级特性:列表推导、迭代器生成器进行介绍。
列表推导
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
可以用list(range(1, 11))
如果要生成[1x1, 2x2, 3x3, …, 10x10],可以通过循环,但这样太繁琐,用列表生成式可以用一行语句生成:
1 | L = [] |
for 循环后还可以添加if判断语句,仅筛选出偶数的平方:
1 | L = [ixi for i in range(1,11) if i % 2 == 0] |
还可以使用双重循环生成全排列:
1 | # 输出['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] |
迭代器生成器
- 生成器
使用了yield函数被称为生成器generator,返回的是一个迭代器。
在调用生成器运行过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行。
- 迭代器
从集合的第一个元素开始访问,直到所有的元素被访问完结束,只能往前不会后;字符串、列表或元组对象都可用于创建迭代器,next()方法返回的是下一个迭代器对象。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#斐波那契数列使用迭代器生成器实现
import sys
def fibonacci(n,w=0): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
print('%d,%d' % (a,b))
counter += 1 f = fibonacci(10,0) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except :
sys.exit()