目录
第一部分:zip遍历
第二部分:流函数输入输出
(1)map()遍历
?(2)reduce迭代累积
(3)filter判定
第三部分:枚举
第一部分:zip遍历
在python中,通过zip()函数,可以把多个可迭代对象中的元素压缩到一起,返回一个可迭代对象。借助list,zip()函数将每个可迭代对象中的对应位置元素压缩,直观地形成一个元组序列。zip()参数可以接受任何类型序列对象,元组中最终元素的个数取决于可迭代对象中最短的那个。
没有参数时,zip()函数会返回一个空的元组序列。若只含有一个可迭代对象,zip()函数会将第二个可迭代对象以空序列表示。
>>> zip('want','456')
<zip object at 0x0000022BA89E0500>
>>> list(zip('want','456'))
[('w', '4'), ('a', '5'), ('n', '6')]
另外,要注意,zip()对象只能遍历一次,第一次遍历后,内存已被释放,第二次遍历显示为空。
>>> num=zip('abcd','0123')
>>> list(num)
[('a', '0'), ('b', '1'), ('c', '2'), ('d', '3')]
>>> list(num)
[]
第二部分:流函数输入输出
Python中,常用的函数map()、reduce()、filter(),
(1)map()遍历
map是python内置函数,功能性强,会根据提供的函数对指定的序列做映射。内置函数map()可以把一个函数func依次映射到目标对象的每个相应元素上。map()函数不会对原序列或者迭代对象做出修改。
>>> list(map(int,range(6)))
[0, 1, 2, 3, 4, 5]
>>> def adds(x):
return x+2
>>>list(map(adds(5),range(10)))
[5,6,7,8,9,10,11,12,13,14]
?(2)reduce迭代累积
接下来,说明下reduce()函数,由于Python各版本的持续更新,用户普遍用的都是Python3.x,在Python3.x中,reduce()函数不再是内置函数,而是要通过导入标准库functools。reduce与map()不同,reduce接收两个参数的函数以迭代累积的方式依次对对象操作。先看一串代码:
from functools import reduce
>>> reduce(lambda x,y : x+y ,[1,2,3,4,5])
15
结果确定是,列表五个数进行累加,可是它是如何实现操作的呢?
lambda是对x,y加法运算,?1+2=3赋值给下一个x,而y的值,轮流从列表往下取实现累加。reduce函数有三个参数,第一个参数就是作用函数,第二个函数就是可迭代的对象,第三个是迭代初始值。通过导入标准库operator可以实现累乘作用。
(3)filter判定
内置函数filter()作用是将一个单参数函数作用到一个序列上,返回该序列中使用该函数返回值为True的元素组成的fiter对象,简单来说它就相当于一个过滤器。格式为filter(function, iterable)。
>>> def odds(n):
... if n % 2 != 0: return True
... return False
>>> new_list = filter(odds,[1,2,3,4,5])
>>> print(new_list)
<filter object at 0x000001F53A481CC0>
>>> list(new_list)
[1, 3, 5]
这三个函数是Python支持函数编程的重要体现,函数式编程,把问题分解为一系列的函数操作,输入依次流入和流出一系列函数,最终完成预定任务和目标。函数式编程思想,使得程序更加模块化,提高效率与代码复用率。
第三部分:枚举
在C语言中,一般通过while()循环来实现枚举,或者用专门的enum函数,当然Python中也亦如此,通过使用enumerate()函数,来枚举可迭代对象中的元素,返回的可迭代enumerate对象,其中每个元素都是包含索引和值的元组。enumerate函数中还支持start参数,用来指定索引起始值。
>>> enumerate('apple')
<enumerate object at 0x00000201DA1F0540>
>>> list(enumerate('apple'))
[(0, 'a'), (1, 'p'), (2, 'p'), (3, 'l'), (4, 'e')]
>>> list(enumerate('bananas',4))
[(4, 'b'), (5, 'a'), (6, 'n'), (7, 'a'), (8, 'n'), (9, 'a'), (10, 's')]
?这里的枚举遍历与zip()同样,在一次遍历后内存被释放。
>>> num=enumerate('apple')
>>> list(num)
[(0, 'a'), (1, 'p'), (2, 'p'), (3, 'l'), (4, 'e')]
>>> list(num)
[]
|