前言
列表推导式
列表推导式可以帮助我们快速得到一个我们需要的列表
得到一个1到20的列表
a = [x for x in range(1,21)]
print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
得到一个1到20内的偶数列表
a = [x for x in range(1,21) if x%2 == 0]
print(a)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
得到九九乘法表
a = [x*y for x in range(1,10) for y in range(1,10)]
print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
列表生成器
列表生成器的语法与列表推导式的语法很相似,只需要将[ ]换成()
语法:( i for i in range(1,10))
它返回的是对象
a = (i for i in range(1,7))
print(a)
<generator object <genexpr> at 0x0000013F8FB0DB30>
因此我们想要拿到其中的元素需要使用next()
next()相当于一个指针,并且不会回退直到抛出异常
a = (i for i in range(1,7))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
1
2
3
4
5
6
Traceback (most recent call last):
File "E:\PyCharm\python\text.py", line 8, in <module>
print(next(a))
StopIterationProcess finished with exit code 1
生成器函数
普通函数:
#斐波那契数列
def febonacci(num):
a = []
index = 0
first = 1
second = 1
while index < num:
a.append(first)
first,second = second,first+second
index += 1
print(a)
if __name__ == "__main__":
febonacci(10)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
生成器函数:
#斐波那契数列
def febonacci(num):
index = 0
first = 1
second = 1
while index < num:
yield first
first,second = second,first+second
index += 1
if __name__ == "__main__":
res = febonacci(10)
i = 0
while i < 10:
i += 1
print(next(res))
1
1
2
3
5
8
13
21
34
55