string(21) "{"docs":[],"count":0}" python列表推倒式,生成器,迭代器, - 爱码网

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列表推倒式,生成器,迭代器, 

 

Python的迭代器

 

什么是迭代器

Python的迭代器在for内部通过循环实现。Python的迭代器对象必须实现__iter__()和__next__()方法。 如果我们可以通过迭代器获取一个对象,那么这个对象称为“可迭代的”。很多内置的容器,比如list、tuple、string等,都是可迭代的。
--------------------- 
python列表推倒式,生成器,迭代器,

 

python列表推倒式,生成器,迭代器, 

 

相关文章: