函数补充
程序员文章站
2022-05-12 22:06:31
...
三个重要的大数据用到的函数:
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)
print(ol)[('Bob', 88), ('Bob', 75), ('Lisa', 66), ('Adarm', 55)]按降序改变之后的 #再次给ol赋值即可改变ol
对字符串排序时,有时候忽略大小写排序更符合习惯。请利用sorted()高阶函数,实现忽略大小写排序的算法。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)]
small exerse:用函数的方法# 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();