1、 列表推导式
列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形。
1.1格式
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
过滤条件可有可无,取决于实际应用,只留下表达式;相当于下面这段for循环:
复制代码代码如下:
result = []
for value in collection:
if condition:
result.append(expression)
#平方列表
#列表推导
print('0-9的平方列表(推导):', [x**2 for x in range(10)])
#for循环
list = []
for x in range(10):
list.append(x**2)
print('0-9的平方列表', list)
print('------------------------------')
#偶数的平方列表
#列表推导
print('0-9偶数的平方列表(推导):', [x**2 for x in range(10) if x%2 == 0])
#for循环
list1=[]
for x in range(10):
if x%2 == 0:
list1.append(x**2)
print('0-9偶数的平方列表:', list1)
print('---------------------------------')
#立方列表的奇数
#列表推导
print('0-9立方的奇数列表(推导):', [x**2 for x in range(10) if x**2 % 2 != 0] )
#for循环
list2 = []
for x in range(10):
if x**2 % 2 !=0:
list2.append(x**2)
print('0-9立方的奇数列表:', list2)
print('--------------------------------')
#找出质数
#一般方法
compositeNumber = []
num = []
#合数一般都是2-7的倍数
for i in range(2,8):
#4是最小的合数,找出50以内的所有合数
for j in range(2*i, 50, i):
compositeNumber.append(j)
for x in range(3,50):
if x not in compositeNumber:
num.append(x)
print('2-50内的质数:',num)
#用推导
compositeNumber = [j for i in range(2,8) for j in range(i*2,50,i)]
num = [x for x in range(3,50) if x not in compositeNumber]
print('2-50内的质数(推导):',num)
#列表推导之间的嵌套
num = [x for x in range(3,50) if x not in [j for i in range(2,8) for j in range(i*2,50,i)]]
print('2-50内的质数(嵌套列表推导):',num)
结果:
0-9的平方列表(推导): [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
0-9的平方列表 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
------------------------------
0-9偶数的平方列表(推导): [0, 4, 16, 36, 64]
0-9偶数的平方列表: [0, 4, 16, 36, 64]
---------------------------------
0-9立方的奇数列表(推导): [1, 9, 25, 49, 81]
0-9立方的奇数列表: [1, 9, 25, 49, 81]
--------------------------------
2-50内的质数: [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
2-50内的质数(推导): [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
2-50内的质数(嵌套列表推导): [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
从代码和结果中可以看出,用列表推导式可以用少量的代码来实现同样的结果。
---------------------
Python的生成器
什么是生成器
创建python迭代器的过程虽然强大,但是很多时候使用不方便。生成器是一个简单的方式来完成迭代。简单来说,Python的生成器是一个返回可以迭代对象的函数。
怎样创建生成器
在一个一般函数中使用yield关键字,可以实现一个最简单的生成器,此时这个函数变成一个生成器函数。yield与return返回相同的值,区别在于return返回后,函数状态终止,而yield会保存当前函数的执行状态,在返回后,函数又回到之前保存的状态继续执行。
---------------------
生成器函数与一般函数的不同
一下是几点不同:
生成器函数包含一个或者多个yield
当调用生成器函数时,函数将返回一个对象,但是不会立刻向下执行
像__iter__()和__next__()方法等是自动实现的,所以我们可以通过next()方法对对象进行迭代
一旦函数被yield,函数会暂停,控制权返回调用者
局部变量和它们的状态会被保存,直到下一次调用
函数终止的时候,StopIteraion会被自动抛出
---------------------
Python的迭代器
什么是迭代器
Python的迭代器在for内部通过循环实现。Python的迭代器对象必须实现__iter__()和__next__()方法。 如果我们可以通过迭代器获取一个对象,那么这个对象称为“可迭代的”。很多内置的容器,比如list、tuple、string等,都是可迭代的。
---------------------