一、python 的map()函数:
1、map()函数是一个python的内置高阶函数,他接受一个函数f和一个list或者多个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并返回。
注意,map函数不改变原有的list,而是返回新的list。
由于list可以包含任意类型的元素,因此,map函数可以处理包含任意类型的list,只要传入的函数f可以处理这种数据类型即可。
例子:
假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,使用map函数,把一个list变成一个包含规范英文名字的list:
输入:['adam', 'LISA', 'barT']
输出:['Adam', 'Lisa', 'Bart']
def format_name(s):
s1 = s[0:1].upper() + s[1:].lower()
return s1
print map(format_name,['adam', 'LISA', 'barT'])
2、当map函数中的list有多个时:
map()可以并行的对每个list执行如下图所述的过程:
此时,传入几个list,函数f就应该有几个形式参数。
例子:
l2 = map(lambda x,y:x*y,[1,2,3],[1,2,3])
输出:[1,4,9]
l3 = map(lambda x,y:(x*y,x+y),[1,2,3,4],[5,6,7,8])
输出:[(5, 6), (12, 8), (21, 10), (32, 12)]
python3中,可以处理表长不一致的情况,但是无法处理类型不一致的情况。
map的特殊用法:可以做类型转换。
例子:
l = map(int,'1234')
for i in l:
print type(i)
print i
输出结果为:
<type 'int'>
1
<type 'int'>
2
<type 'int'>
3
<type 'int'>
4
3、当map中的传入的函数参数是None时,自动假定一个‘identity’函数,这时候就是模仿zip()函数,
例子:
l = [1,2,3]
x = map(None,l)
print x
输出结果为:[1,2,3]。
print map(None,[1,2,3],[4,5,6])
输出结果为:
[(1, 4), (2, 5), (3, 6)]
二、python的filter()函数:
filter函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件的元素组成的新列表。
函数有两个参数,第一为函数,第二个为序列。序列的每个元素作为参数传递给函数进行判断,返回true或false。将返回true的元素放到新列表中返回。
语法:filter(function,iterable)
function是判断函数,iterable是可迭代对象。
例子:过滤链表中所有的奇数:
def is_odd(n):
return n%2 == 1
new_list = list(filter(is_odd,[1,2,3,4,5,6,7,8,9,10]))
print new_list
输出结果为:[1,3,5,7,9]
三、python的切片和索引:
参考自:http://www.cnblogs.com/luruiyuan/p/5926133.html
1.索引和切片:python当中数组的索引和其他语言一样,从0~n-1,使用索引的方法也是中括号,但是python中的切片的使用简化了代码
索引:取出数组s中第3个元素:x=s[2]
切片:用极少的代码将数组元素按需处理的一种方法。切片最少有1个参数,最多有3个参数,演示如下:
我们假设下面所用的数组声明为array=[2,3,4,5,6]
1个参数:
- array[1:]——从下标为1的元素选择到最后一个元素,返回 [4,5,6]
- array[:3]——从下标为0的元素选择到下标为2的元素,不包括下标3的元素,返回[2,3,4]
- array[::2]——从下标为0的元素开始,最后一个%2为0的下标对应的那个元素为止
说明:如果前2个参数中有任何一个为负数,那么,分2种情况,如果负数 小于 -n,那么就给负数归0,如果仅仅在-n~0,那么就将这个数理解为0~n-1之间转圈圈就可以了。负数转圈的算法,很简单,就不说了
2个参数:
- array[1:-2]——从下标1开始,到下标(n-1)之前的所有元素,返回[3,4]
- array[-2:3]——当第一个参数经过计算大于等于后一个,返回空数组[]
- array[-13:3]——参见上面第一个说明,第一个参数归0,返回[2,3,4]
3个参数
- [::-1]——从头到尾,将数组反转,返回[6,5,4,3,2]
- [-1::-2]——从尾到头,每个一个元素,选择一个元素,返回[6,4,2]
说明:没有第3个参数时,切片只能从左向右,此时若第一个参数大于等于第二个参数,则返回空数组
说明:第三个参数<0时,切片方向可以被改变,此时没有上述限制