filter(function, sequence)返回一个序列(sequence),包括了给定序列中所有调用function(item)后返回值为true的元素。
>>> def f(x):
··· return x%2 != 0
...
>>> filter(f, range(1,11))
[1, 3, 5, 7, 9]
map(function, sequence)为每一个元素依次调用function(item)并将返回值组成一个链表返回。
>>> def square(x):
... return x*x
...
>>> map(square, range(1,11))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
reduce(func, sequence)返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数,再以返回值和第三个参数调用,依次执行下去。
>>> def sum(x,y):
... return x+y
...
>>> reduce(sum, range(1,11))
55
def创建的函数是有名字的,lambda创建的是匿名函数,灵活使用lambda使程序更加简洁。1~3中传入filter/map/reduce的函数可以直接写成下面的形式:
>>> filter(lambda x: x%2 != 0, range(1,11))
[1, 3, 5, 7, 9]
>>> map(lambda x: x*x, range(1,11))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> reduce(lambda x,y: x+y, range(1,11))
55
链表推导式提供了一个创建链表的简单途径,无需使用map(), filter() 以及lambda。返回链表的定义通常要比创建这些链表更清晰。每一个链表推导式包括在一个for 语句之后的表达式,零或多个 for或 if 语句。返回值是由 for 或if子句之后的表达式得到的元素组成的链表。如果想要得到一个元组,必须要加上括号。
>>> [x for x in range(1,11) if x%2 != 0]
[1, 3, 5, 7, 9]
>>> [x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [x+y for x in range(1,11) for y in range(11,12)]
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
>>> [(x,x**2) for x in range(1,11)]
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81), (10, 100)]
>>> scores = {'Alex':90, 'Bob':80, 'Jack':59}
>>> for k,v in scores.iteritems():
... print k,':',v
...
Bob : 80
Alex : 90
Jack : 59
>>> for i,v in enumerate(['Alex','Bob','Jack']):
... print i,v
...
0 Alex
1 Bob
2 Jack
>>> name = ['Alex','Bob','Jack']
>>> scores = [90, 80, 59]
>>> for n,s in zip(name, scores):
... print n,'==>',s
...
Alex ==> 90
Bob ==> 80
Jack ==> 59
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print n, 'equals', x, '*', n/x
... break
... else:
... print n, 'is a prime number'
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
>>> [1,2,3] < [1,2,4]
True
>>> [1,2,3] < [1,2,3,4]
True
>>> (1,2,3) == (1.0,2.0,3.0)
True
>>> [1,2,3] < 'string'
True
>>> (1,2,3) > 'string'
True