列表推导式(列表解析式)、集合推导式(集合解析式)、字典推导式(字典解析式)、生成器推导式(解析式)和生成器函数

参考链接: 【慕课】Python语言基础与应用-北京大学-陈斌-字幕校对 P51 50-高级特性:推导式
参考链接: 【慕课】Python语言基础与应用-北京大学-陈斌-字幕校对 P52 51-高级特性:生成器函数

在这里插入图片描述

在这里插入图片描述

实验1,列表、元组、字典、集合推导式:

Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> lis = [x*x for x in range(10)]
>>> type(lis)
<class 'list'>
>>> [x*x for x in range(10) if x%2==0]
[0, 4, 16, 36, 64]
>>> lis = [x*x for x in range(10) if x%2==0]
>>> lis
[0, 4, 16, 36, 64]
>>> 
>>> {"K"+str(x):x**3 for x in range(10)}
{'K0': 0, 'K1': 1, 'K2': 8, 'K3': 27, 'K4': 64, 'K5': 125, 'K6': 216, 'K7': 343, 'K8': 512, 'K9': 729}
>>> d = {"K"+str(x):x**3 for x in range(10)}
>>> type(d)
<class 'dict'>
>>> d
{'K0': 0, 'K1': 1, 'K2': 8, 'K3': 27, 'K4': 64, 'K5': 125, 'K6': 216, 'K7': 343, 'K8': 512, 'K9': 729}
>>> {"K"+str(x):x**3 for x in range(10) if x%2==0}
{'K0': 0, 'K2': 8, 'K4': 64, 'K6': 216, 'K8': 512}
>>> d = {"K"+str(x):x**3 for x in range(10) if x%2==0}
>>> d
{'K0': 0, 'K2': 8, 'K4': 64, 'K6': 216, 'K8': 512}
>>> type(d)
<class 'dict'>
>>> {x*x for x in range(10)}
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
>>> s = {x*x for x in range(10)}
>>> s
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
>>> type(s)
<class 'set'>
>>> {x*x for x in range(10) if x%2==0}
{0, 64, 4, 36, 16}
>>> s = {x*x for x in range(10) if x%2==0}
>>> s
{0, 64, 4, 36, 16}
>>> type(s)
<class 'set'>
>>> 
>>> t = tuple(x*x for x in range(10))
>>> t
(0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
>>> tuple(x*x for x in range(10))
(0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
>>> type(t)
<class 'tuple'>
>>> 
>>> tuple(x*x for x in range(10) if x%2==0)
(0, 4, 16, 36, 64)
>>> t = tuple(x*x for x in range(10) if x%2==0)
>>> t
(0, 4, 16, 36, 64)
>>> type(t)
<class 'tuple'>
>>> 
>>> 
>>> [x+y for x in range(5) for y in range(100,700,100)]
[100, 200, 300, 400, 500, 600, 101, 201, 301, 401, 501, 601, 102, 202, 302, 402, 502, 602, 103, 203, 303, 403, 503, 603, 104, 204, 304, 404, 504, 604]
>>> 
>>> 
>>> [x+y for x in range(5) for y in range(100,700,100)]
[100, 200, 300, 400, 500, 600, 101, 201, 301, 401, 501, 601, 102, 202, 302, 402, 502, 602, 103, 203, 303, 403, 503, 603, 104, 204, 304, 404, 504, 604]
>>> 
>>> 
>>> [x+y for x in range(5) for y in range(x)]
[1, 2, 3, 3, 4, 5, 4, 5, 6, 7]
>>> [x for range(0)]
SyntaxError: invalid syntax
>>> [x for x in range(0)]
[]
>>> [x+y for x in range(5) for y in range(x)]
[1, 2, 3, 3, 4, 5, 4, 5, 6, 7]
>>> [x+y for y in range(x) for x in range(5)]
Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    [x+y for y in range(x) for x in range(5)]
NameError: name 'x' is not defined
>>> 
>>> [str(x)+str(y) for x in range(5) for y in range(x)]
['10', '20', '21', '30', '31', '32', '40', '41', '42', '43']
>>> 
>>> 
>>> 

在这里插入图片描述

在这里插入图片描述

实验2,生成器推导式:

Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> agen = (x**2 for x in range(5))
>>> agen
<generator object <genexpr> at 0x000001903A652D48>
>>> 
>>> for n in agen:
	print(n)

	
0
1
4
9
16
>>> 
>>> 
>>> for n in agen:
	print('打印:',n)

	
>>> 
>>> 
>>> for n in agen:
	print('打印:',n)

	
>>> 
>>> agen = (x**2 for x in range(5))
>>> for n in agen:
	print('打印:',n)

	
打印: 0
打印: 1
打印: 4
打印: 9
打印: 16
>>> # 生成器只能使用一次
>>> 
>>> agen = (x**2 for x in range(5))
>>> list(agen)
[0, 1, 4, 9, 16]
>>> list(agen)
[]
>>> list(agen)
[]
>>> agen = (x**2 for x in range(5))
>>> list(agen)
[0, 1, 4, 9, 16]
>>> list(agen)
[]
>>> agen = (x**2 for x in range(5))
>>> [agen]
[<generator object <genexpr> at 0x000001903A698748>]
>>> agen = (x**2 for x in range(5))
>>> lis = list(agen)
>>> lis
[0, 1, 4, 9, 16]
>>> type(lis)
<class 'list'>
>>> 
>>> 
>>> 
>>> 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
实验3,生成器函数:

Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> def fibonacci(up):
	a, b = 0, 1
	while(a <= up):
		yield a
		a, b = b, a+b

		
>>> for fib in fibonacci(100):
	print(fib)

	
0
1
1
2
3
5
8
13
21
34
55
89
>>> fibonacci(10)
<generator object fibonacci at 0x0000023505E92D48>
>>> list(fibonacci(10))
[0, 1, 1, 2, 3, 5, 8]
>>> gen = fibonacci(10)
>>> for fib in gen:
	print(fib)

	
0
1
1
2
3
5
8
>>> 
>>> for fib in gen:
	print(fib)

	
>>> 
>>> gen = fibonacci(10)
>>> gen = fibonacci(50)
>>> for fib in gen:
	print(fib)

	
0
1
1
2
3
5
8
13
21
34
>>> 
>>> gen = fibonacci(50)
>>> print(gen)
<generator object fibonacci at 0x0000023505ED8748>
>>> next(gen)
0
>>> next(gen)
1
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
3
>>> next(gen)
5
>>> iter(gen)
<generator object fibonacci at 0x0000023505ED8748>
>>> next(gen)
8
>>> it = iter(gen)
>>> next(it)
13
>>> next(it)
21
>>> print(next(it))
34
>>> gen = fibonacci(50)
>>> print(next(it))
Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    print(next(it))
StopIteration
>>> gen = fibonacci(50)
>>> gen
<generator object fibonacci at 0x0000023505ED86C8>
>>> iter(gen)
<generator object fibonacci at 0x0000023505ED86C8>
>>> it = iter(gen)
>>> it
<generator object fibonacci at 0x0000023505ED86C8>
>>> next(it)
0
>>> next(it)
1
>>> next(it)
1
>>> next(it)
2
>>> next(it)
3
>>> next(it)
5
>>> next(it)
8
>>> next(it)
13
>>> next(it)
21
>>> next(it)
34
>>> next(it)
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    next(it)
StopIteration
>>> next(it)
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    next(it)
StopIteration
>>> 
>>> 
>>> 
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值