【python学习笔记】列表常用的内置函数

对于列表来讲,有三个内置函数非常有用: filter(),map() 以及 reduce()。

1、filter(function, sequence)

filter(function, sequence)返回一个sequence(序列),包括了给定序列中所有调用function(item)后返回值为true的元素(如果可能的话,会返回相同的类型)。如果该 序列 (sequence)是一个str,unicode或者tuple,返回值必定是同一类型,否则,它总是list。例如,以下程序可以计算一个被 3 或者 5 整除的序列:

>>> def f(x): return x % 3 == 0 or x % 5 == 0
...
>>> filter(f, range(2, 25))
[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]

这个方法是用于过滤序列的,即其会过滤传入的第二个参数,将其中不符合函数f的丢掉,剩下的组成一个新的list并返回;

2、map(function, sequence)

map(function, sequence) 为每一个元素依次调用 function(item) 并将返回值组成一个链表返回,这个和filter不同之处在于,filter是过滤,而map方法是计算,将参数sequence里的每一个元素作为参数传入fuction中,并将fuction返回的结果组成一个list并返回,范例如下:

>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

这里可以有多个序列传入,即如果fuction有多个参数要传的话,是需要传递多个sequence的,例如:

>>> seq = range(8)
>>> def add(x, y): return x+y
...
>>> map(add, seq, seq)
[0, 2, 4, 6, 8, 10, 12, 14]

3、reduce(function, sequence)

reduce(function, sequence)返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数function,再以返回值和第三个参数调用,依次执行下去。
这个方法和map方法有相似的地方在于都是将sequence作为参数传入fuction
例如,以下程序计算 1 到 10 的整数之和:

>>> def add(x,y): return x+y
...
>>> reduce(add, range(1, 11))
55

如果序列中只有一个元素,就返回它,如果序列是空的,就抛出一个异常。

可以传入第三个参数作为初始值。如果序列是空的,就返回初始值,否则函数会先接收初始值和序列的第一个元素,然后是返回值和下一个元素,依此类推。例如:


>>> def sum(seq):
...     def add(x,y): return x+y
...     return reduce(add, seq, 0)
...
>>> sum(range(1, 11))
55
>>> sum([])
0

http://www.runoob.com/manual/pythontutorial/docs/html/datastructures.html#tut-morelists

猜你喜欢

转载自blog.csdn.net/df0128/article/details/83990997