三个重要的大数据用到的函数:
map()函数接收两个参数,前者是函数,后者是序列,map将序列的每个元素传入函数中执行,并把结果作为新的list返回。
举例说明,比如我们有一个函数f(x)=x%2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现
#使用lambda函数
print map(lambda x: x % 2, range(7))
结果生成新的列表[0, 1, 0, 1, 0, 1, 0]
filter():
函数接收两个参数,
前者
是函数,后者是序列对于序列中的元素进行
筛选,最终获取符合条件的序列
例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:
def is_odd(x):
return x % 2 = = 1
然后,利用filter()过滤掉偶数:
>>>filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
结果:结果生成新的列表[1, 7, 9, 17]
reduce()内建函数是一个二元操作函数
进行累计操作,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个
二元操作函数)先对集合中的
第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同, reduce()传入的函数 f 必须接收至少两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
def myadd(x,y):
return x+y #reduce()函数也是已从全局函数名调入funools模块使用时要调用
sum=_functools.reduce(myadd,(1,2,3,4,5,6,7))
print(sum) 28
python中自定义排序函数:
Python内置的 sorted()函数可对list从小到大进行排序:
>>>sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]
hus.sort()对原有列表进行排序,改变原来列表的顺序,无返回值
print(shus)就是改变后的列表
sorted()排序函数
排序时不影响原数据,产生新的排序数据
print(sorted(shus))排序后的结果
print(shus)还是原结果
例如:
ol=[("Bob",75),("Adarm",55),("Lisa",66),("Bob",88)]
ul=sorted(ol,key=lambda s:s[1],reverse=True) #s是参数,[1]是括号里的元素下标 #reverse=True降序默认False
print(ol)[('Bob', 75), ('Adarm', 55), ('Lisa', 66), ('Bob', 88)]原体
print(ul)[('Bob', 88), ('Bob', 75), ('Lisa', 66), ('Adarm', 55)]按降序改变之后的
ol=sorted(ol,key=lambda s:s[1],reverse=True)
对字符串排序时,有时候忽略大小写排序更符合习惯。请利用sorted()高阶函数,实现忽略大小写排序的算法。print(ol)[('Bob', 88), ('Bob', 75), ('Lisa', 66), ('Adarm', 55)]按降序改变之后的 #再次给ol赋值即可改变ol
small exerse:用函数的方法ol=[("bob",75),("Adarm",55),("lisa",66),("cob",88)] ul=sorted(ol,key=lambda s:str(s[0]).lower(),reverse=False) print(ul)[('Adarm', 55), ('bob', 75), ('cob', 88), ('lisa', 66)]
# usr/bin/python # -*-coding:utf-8-*- ''' 练习:创建2个列表 一个存姓名 一个存手机 =======通讯录管理系统======= 1.增加姓名和手机 2.删除姓名 3.修改手机 4.查询所有用户 5.根据姓名查找手机号 6.退出 ============================ ''' flag = True; names = ['ok', 'ko']; phones = ['232323232', '12312332']; def Menu(): global flag while flag: print("\n\n=======通讯录管理系统=======") print("1.增加姓名和手机") print("2.删除姓名") print("3.修改手机") print("4.查询所有用户") print("5.根据姓名查找手机号") print("6.退出") print("============================") i = int(input("请选择:")); while True: if i in range(1, 7): break; else: i = int(input("输入错误,请重新输入!")) if i == 1: addUser(); elif i == 2: delUser(); elif i == 3: updatePhone(); elif i == 4: showList(); elif i == 5: getPhoneByName() elif i == 6: flag = False; def addUser(): name=input('请输入姓名:') if checkUser(name)!=-1: print("姓名已存在!") else: names.append(name); phones.append(input('请输入手机号:')); def delUser(): name = input("请输入姓名:"); index=checkUser(name) if index!=-1: names.pop(index); phones.pop(index); print("删除成功!") else: print("姓名不存在!") def updatePhone(): phone = input("请输入手机号:"); index=checkPhone(phone); if index!=-1: new_phone = input("请输入新的手机号:"); phones[index] = new_phone print("修改成功!") else: print("手机号不存在!") def showList(): for i in range(len(names)): print(names[i], phones[i]) def getPhoneByName(): name = input("请输入姓名:"); index=checkUser(name) if index!=-1: print("手机号:", phones[index]) else: print("姓名不存在!") def checkPhone(phone): if phone in phones: return phones.index(phone) else: return -1; def checkUser(name): ''' :param name 查找的名字: :return 有:下标 没有-1: ''' if name in names: return names.index(name) else: return -1; Menu();