python基本列表操作函数
列表解析
python的列表解析(list comprehensions)是对列表中的所有元素进行一次相同的处理,可以用循环来做,但是列表解析的效率要比循环快(至于
为什么快还没有研究过)。
基本形式:[x for item in sequence <if (conditions)>], 这里x表示对item的操作
例子:
S = [x**2 for x in range(10)]
V = [2**i for i in range(13)]
M = [x for x in S if x % 2 == 0]
print S; print V; print M
输出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096]
[0, 4, 16, 36, 64]
ambda表达式
lambda函数主要用于创建简单的函数,其返回值是一个函数对象(Python中所有东西都是对象!!!)
基本形式:lambda <参数>: 函数体,隐函数
例子:
f3 = lambda x,y: x+y
print f3(1,2)
输出:
3
map
基本形式:map(function, sequence),作用是将一个列表映射到另一个列表,
BIF map函数其实很像列表解析,只是在一些特殊情况之下会有不同。
map(f, sequence)
完全等同于:
[f(x) for x in sequence] #这里的f(x)指带对x的操作,而不是函数对象
map(f, sequence1, sequence2)
和以下列表解析很相似:
[f(x1, x2) for x1, x2 in zip(sequence1, sequence2)]
而不同点在于当对两个序列进行map的时候,迭代次数为长序列的长,短序列中没有匹配上的值置为None,
而用列表解析(中间使用zip)的话,迭代次数为短序列的长度,长序列中多出的元素不进行处理。
例子1:
A = ['1','2','3']
B = ['a','b','c','d','e']
def maptest(x, y):
print x, y
map(maptest, A, B)
输出:
1 a
2 b
3 c
None d
None e
例子2:
A = ['1','2','3']
B = ['a','b','c','d','e']
a = [x+y for x,y in zip(A, B)]
print a
输出:
['1a', '2b', '3c']
注意如果将maptest(x,y)定义为x+y会报异常的因为None无法和str相加!!
reduce
reduce函数就是对列表进行连续处理返回一个值
基本形式:reduce(function, sequence, startValue)
例子:
print reduce(lambda x,y:x+y,range(1,11))
输出:
55
filter函数
filter函数用于按照所定义的函数过滤掉列表中的一些元素,这里的function必须返回布尔值,返回值为False的元素过滤掉
基本形式:filter(function, sequence)
例子:
print filter(lambda x:x%2,range(1,10))
输出:
[1, 3, 5, 7, 9]