1. filter
filter(function, sequence)返回一个序列(sequence),包括了给定序列中所有调用function(item)后返回值为true的元素。
>>> def f(x):
··· return x%2 != 0
...
>>> filter(f, range(1,11))
[1, 3, 5, 7, 9]
2. map
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]
3. reduce
reduce(func, sequence)返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数,再以返回值和第三个参数调用,依次执行下去。
>>> def sum(x,y):
... return x+y
...
>>> reduce(sum, range(1,11))
55
4. lambda表达式
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
5. 链表推导式
链表推导式提供了一个创建链表的简单途径,无需使用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)]
6. 循环操作
- 字典循环:关键字和对应的值可以使用iteritems()方法同时解读出来。
>>> scores = {'Alex':90, 'Bob':80, 'Jack':59}
>>> for k,v in scores.iteritems():
... print k,':',v
...
Bob : 80
Alex : 90
Jack : 59
- 单个序列循环:索引位置和对应值可以使用enumerate()函数同时得到。
>>> for i,v in enumerate(['Alex','Bob','Jack']):
... print i,v
...
0 Alex
1 Bob
2 Jack
- 多个序列循环:用zip()进行整体解读。
>>> 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循环可以有一个 else 子句;它在循环迭代完整个列表(对于 for )或执行条件为 false (对于 while )时执行,但循环被 break 中止的情况下不会执行。
>>> 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
7. 比较操作
- 序列对象可以与相同类型的其它对象比较。比较操作按 字典序 进行:首先比较前两个元素,如果不同,就决定了比较的结果;如果相同,就比较后两个元素,依此类推,直到所有序列都完成比较。如果两个元素本身就是同样类型的序列,就递归字典序比较。如果两个序列的所有子项都相等,就认为序列相等。如果一个序列是另一个序列的初始子序列,较短的一个序列就小于另一个。字符串的字典序按照单字符的 ASCII 顺序。
- 不同类型的对象比较是合法的。输出结果是确定而非任意的:类型按它们的名字排序。因而,一个链表(list)总是小于一个字符串(string),一个字符串(string)总是小于一个元组(tuple)等等。数值类型比较时会统一它们的数据类型,所以0等于0.0。
>>> [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