python基础之内置函数与匿名函数

python基础之内置函数与匿名函数

内置函数68个如下图

 

重点的关注的内置函数len,sorted,enumerate,all,any,zip,filter,map,reversed,slice      

len(o):参数为O,返回数据类型的长度
sorted():      sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
      iterable:是可迭代类型; cmp:用于比较的函数,比较什么由key决定;
      key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项
      reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,默认升序。
      返回值:返回一个排序后的列表(字典是按键值排序后的元组组成的列表)
      常用在字典排序,按键排序或者按值排序
enumerate(): 枚举,获取可迭代对象的索引值

all():用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,
   否则返回 False。元素除了是 0、空、FALSE 外都算 TRUE。
any():判断x对象是否为空对象,如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true
zip():接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表,
reversed():反转
slice():切片
map():接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回
filter():接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

内置函数的练习sorted,enumerate,zip,filter,map,reversed,slice

#字典排序
'''
原理:
1.按健排序   dict_keys
2.按值排序   dict_values
3.按键值中的健或值排序   dict_items ,将键值转为元组存在list,key选择按第一个还是第二个排序。
'''
dic = {'a':2,'b':4,'f':7,'d':6,'e':8}
print(dic.keys())    #dict_keys(['a', 'b', 'd', 'e'])
print(dic.values())  #dict_values([2, 4, 6, 8])
print(dic.items())  #dict_items([('a', 2), ('b', 4), ('d', 6), ('e', 8)])
li3 = sorted(dic.keys(),)       #['a', 'b', 'd', 'e', 'f']
li4 = sorted(dic.values())      #[2, 4, 6, 7, 8]
li5 = sorted(dic.items(),key=lambda x:x[0])  #[('a', 2), ('b', 4), ('d', 6), ('e', 8), ('f', 7)]

#enumerate:获取可迭代对象中元素的索引值,
l = [3,5,6,2,9,'q','w','c']
for index,k in enumerate(l):
    print('index = %s,k = %s'%(index,k))

'''
打印:
index = 0,k = 3
index = 1,k = 5
index = 2,k = 6
index = 3,k = 2
index = 4,k = 9
index = 5,k = q
index = 6,k = w
index = 7,k = c 
'''

#zip将两个或者多个可迭代对象相同的索引值取到一起,返回一个zip object,需要for循环取值

l = [4,3,6,5]
l1 = ['q','w','e']

l_li = zip(l,l1)
print(l_li)
for i in l_li:
    print(i)
'''
i遍历为:   
(4, 'q')
(3, 'w')
(6, 'e')
'''

#filter

# 格式
def func(i):
    return i%2 ==0
li6 =list(filter(func,range(10)))     #[0, 2, 4, 6, 8] 满足留下,不满足舍去
print(li6)

# map   map(func,iter):iter经func后返回一个对象
def pow2(i):
    return i*i
l =[1,2,3,6,5,7]
li7 = list(map(pow2,l))
print(li7)          #[1, 4, 9, 36, 25, 49],map(func,L)

匿名函数

函数名 = lambda 参数 :返回值

#参数可以有多个,用逗号隔开
#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
#返回值和正常的函数一样可以是任意数据类型


add = lambda x,y:x+y
print(add(3,4))

习题:

求10-100000内每位加起来等于5的数,如14,23。。。。10023等,

请先思考再看答案,提示:可以先写个分解函数,将拆分的数字家和为5的筛选出来。这是基础的

#第一种常规解法
def split_num(i):
    strnum = str(i)
    sum = 0
    for i in strnum:
        i =int(i)
        sum += i
    return sum
num_list = []
for i in range(10,100000):
    nums = split_num(i)
    if nums == 5:
        num_list.append(i)
for i in num_list:
    print('%5s'%i,end=',')
    if (num_list.index(i)+1)%10 == 0:
        print()
print('\n总计有%s个'%len(num_list))
#充分利用内置函数
ls = [x for x in range(10,100000) if sum(map(int,str(x)))==5]
for k,v in enumerate(ls):
    print('%5s'%v,end=',')
    if (k+1) % 10 == 0 :
        print()
print('\n总共有%s个'%len(ls))
View Code

猜你喜欢

转载自www.cnblogs.com/chenrongjin/p/10024138.html