'''iter函数
iter(object)
object必须是集合对象,且支持迭代协议(iteration protocol)或者支持序列协议(sequence protocol)。
说白了,也就是实现了__iter__()方法或者__getitem__()方法。
如果传递了第二个参数,则object必须是一个可调用的对象(如,函数)。此时,iter创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用object。
如果__next__的返回值等于sentinel,则抛出StopIteration异常,否则返回下一个值。
'''
list1 = [1,2,3,4]
it = iter(list1)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
#print(next(it))
# # print(next(it)) 超出数组长度抛出StopIteration异常
运行结果:
1
2
3
4
==============================================================================
'''yield 任何使用yield的函数都称之为生成器
(generator )生成器'''
def frange(start,stop,step):
x = start
while x < stop:
yield x
x += step
for i in frange(1,4,1):
print(i)
运行结果:
1
2
3
4
5
6
7
8
9
============================================================================
'''filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
'''
list3 = list(filter(lambda x:x ,range(1,10)))
print(list3)
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
========================================================================
'''map函数
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
'''
list4 = list(map(lambda x:x ,range(1,10)))
print(list4)
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
#例子:filter与map函数过滤list中的元素及filter与map函数的区别
list3 = list(filter(lambda x: x%2>0, range(1, 10)))
print(list3)
list4 = list(map(lambda x: x%2>0, range(1, 10)))
print(list4)
运行结果:
[1, 3, 5, 7, 9]
[True, False, True, False, True, False, True, False, True]
===========================================================================
'''zip函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
'''
#例子:将两个字典拼成一个字典
print(tuple(zip((1,2),(3,4))))
运行结果:
((1, 3), (2, 4))
#例子:调转字典的key和value
dict1={'a':'aa','b':'bb'}
print(dict(zip(dict1.values(),dict1.keys())))
运行结果:
{'bb': 'b', 'aa': 'a'}
a = [1,2,3]
b = [4,5,6]
a1, a2 = zip(*zip(a,b)) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
print(list(a1))
print(list(a2))
运行结果:
[1, 2, 3]
[4, 5, 6]
=============================================================================
'''reduce函数
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个数据集合求和结果
'''
#例子:计算1+2+3+4+....+100
from functools import reduce
print(reduce(lambda x,y:x+y,range(1,101),0))
运行结果: 5050