python 内置函数

#coding=UTF-8
from functools import reduce

alist = [1, 3, 5, 7, 9]

# 1.map
def mi(x):
    return x**2
print "map mi结果:",list(map(mi,alist))
# 1.2 map把元素为int的转化为字符串
print "元素类型为int的转为字符串:",list(map(str,alist))

# 2.reduce
# 2.1 把序列[1, 3, 5, 7, 9]变换成整数13579
def test_reduce(x,y):
    return x*10+y
a = reduce(test_reduce,alist)
print "reduce结果为:",a


# 练习
'''
1.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,
其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:
'''
name = ['adam', 'LISA', 'barT']
print "用户输入的不规范的英文名字,变为首字母大写:",list(map(str.capitalize,name))

# 2.Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积:
def prod(x,y):
    return x*y
print "接受一个list并利用reduce()求积:",reduce(prod,alist)

# 3.利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456
def str2float(s):
    dot = 0
    num = 0
    if "." in s:
        for i,x in enumerate(s):
            if x == ".":
                dot = len(s) - i - 1
                s = s.replace('.','')
                break
    else:
        s = s
    print("s=",s)
    def fn(x,y):
        return x * 10 + y
    def char2num(s):
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    return reduce(fn,map(char2num,s)) / (10**dot)
A = str2float("123.456")
print("练习3的结果:",A) # == > 练习3的结果: 123.456

# 3.filter:用于过滤序列和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
def is_odd(x):
    return x%2 == 1
print "奇数有:",list(filter(is_odd,[1, 2, 4, 5, 6, 9, 10, 15]))

# 3.1 把一个序列中的空字符串删掉,可以这么写:
def not_empty(s):
    return s and s.strip()
print "去掉空字符串后:",list(filter(not_empty,['A', '', 'B', None, 'C', '  ']))

# 练习回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()滤掉非回数:
def is_pal(x):
    if str(x)==str(x)[::-1]:
        return x
print "回数有:",list(filter(is_pal,[x for x in range(1,1000)]))
print "回数有:",[x for x in range(1,1000) if str(x)==str(x)[::-1]]

# 4.sorted 排序算法
s_l = [1,3,6,-20,34]
s_l_1 = ["ABC","abc","D","d"]
print "升序排列:",sorted(s_l)
# 4.1 sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序
print"自定义排序:",sorted(s_l,key=abs)
print"自定义反向排序:",sorted(s_l,key=abs,reverse=True)
# 4.2 字符串排序依照ASCII
print"字符串排序:",sorted(s_l_1)
# 4.3 忽略大小写排序
print"忽略字符串大小写排序:",sorted(s_l_1,key=str.lower)
# 4.4 要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
print"忽略字符串大小写反向排序:",sorted(s_l_1,key=str.lower,reverse=True)

# 练习假设我们用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 请用sorted()对上述列表分别按名字排序:
L = [('Bob', 75),('Adam', 90), ('Adam', 92), ('Bart', 66), ('Lisa', 88),('Bart', 100), ('Bart', 88)]
print "名字列表为:",L
def top(t):
    return t[0]
print "按照名字排序(默认升序,名字相同的情况下谁的名字在前谁排在前方):",sorted(L,key=top)

# 扩展1:如果名字相同,按照分数排序(默认升序)
def by_name_score(t):
    return (t[0],t[1])
print "名字相同,按照分数升序排序:",sorted(L,key=by_name_score)

#待补充
print "名字相同,按照分数降序排列(答案待补充):",sorted(L,key=by_name_score,reverse=True)

from operator import itemgetter,attrgetter

 

posted @ 2019-03-08 09:27  sjxm2017  阅读(200)  评论(0编辑  收藏  举报