函数补充

三个重要的大数据用到的函数:

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();




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值