python学习笔记 day16 几个重要的内置函数
enumerate(): 枚举,返回元素和该元素的索引
L=[1,2,3,4] for index,item in enumerate(L): print(index,item)
运行结果:
all(iterable)----接收一个可迭代对象,当其中元素都是True,才返回True(有点类似于and),有一个为假,就返回False; any()-----接收一个可迭代对象,当所有元素都为假时才返回False(有点类似于or)
print(all([1,2,3,'',' '])) #当传进去的可迭代对象有一个为假,就返回False,比如这里的‘’ print(all([' ',[],1,[1,2,3]])) #当传进去的可迭代对象有一个为假,就返回False,比如这里的[] print(any([1,[],'',0])) #当传进去的可迭代对象有一个不为空,比如这里的1,就返回True print(any(['',' ',[],0])) #当传进去的可迭代对象有一个元素不为空,比如这里的‘ ’就返回True
运行结果:
zip():接收两个可迭代对象,返回一个迭代器,将他们一个接一个组合之后再输出,有点类似于拉链
L1=[1,2,3,4] L2=['hello','xuanxuan','你好','璇璇'] ret=zip(L1,L2) #zip()接收两个可迭代的参数,返回一个迭代器 print(ret) print(ret.__next__()) print('***************') for i in ret: # 接着输出,因为上面已经使用.__next__()返回了一个 print(i)
运行结果:
如果两个可迭代对象长度不匹配,就是个数不一致,zip()函数就只会按照长度小的那个组合,其他的不再输出:
L1=[1,2,3] L2=['hello','xuanxuan','你好','璇璇'] ret=zip(L1,L2) print(zip) #zip()函数返回一个迭代器 for i in ret: print(i)
运行结果:
fliter():接受一个函数和一个可迭代对象,返回一个迭代器。起到过滤的作用,会把这个函数依次作用于可迭代对象的每一个元素,将符合条件的元素筛选出来
filter()函数有点类似于迭代器表达式 写上if条件判断的结果:
比如我们现在需要筛选出0-10范围内的奇数:
generator=(i for i in range(0,11) if i%2==1) #使用生成器表达式产生一个生成器,带有if条件判断,起到过滤的作用 print(generator) for i in generator: print(i)
或者使用filter函数:
def is_odd(x): #自定义函数,奇数返回True return x%2==1 generator=filter(is_odd,list(range(0,11))) print(generator) for i in generator: print(i)
运行结果:
如果有一个需求:需要过滤掉None,或者空字符:
def is_str(s): return s and len(s.strip()) #s是为了过滤掉 空字符串'' None,和空列表[] 而len(s.strip())是为了过滤' '这种有空格组成的 generator=filter(is_str,['',' ',None,'test',[],'xuanbaby']) print(generator) #filter()函数返回一个迭代器 print(generator.__next__()) print('*****') for i in generator: print(i)
运行结果:
返回1-100中平方根为整数的数:
import math def func(x): return int(math.sqrt(x))==math.sqrt(x) generator=filter(func,list(range(1,101))) for i in generator: print(i)
运行结果:
map(): 接受一个函数,和一个可迭代对象,返回一个迭代器,相当于把函数作用于可迭代对象的每一个元素,然后按照某种约定的函数规则返回
比如,使用map()函数返回列表中元素的绝对值
generator=map(abs,[1,2,-3,4,-5,-7]) print(generator) #map()函数返回一个迭代器 print(generator.__next__()) print('*********') for i in generator: print(i)
运行结果:
filter()就是按照某种规则(前面传的函数)把后面可迭代对象中的元素符合条件的那些取出来;返回的是一个迭代器,需要.__next__()或者for循环取值
map() 按照某种规则(前面传的参数)依次作用于后面可迭代对象中的元素,相当于把后面的元素按照某种映射规则进行映射,返回的也是一个迭代器;
sorted():将list进行排序
L.sort() :作用于原列表,所以会改变原有列表(可以对比L.append()方法就是操作原列表来记忆~),可以接受一个关键字参数key=func,表示按照某种规则排序,比如按照绝对值进行排序;
sorted(L): 产生一个新列表,原列表中的元素并不会被改变;
上面的这两种方法跟昨天的L.reverse()-----操作原列表,reversed(L) 返回一个可迭代的对象,不会改变原来列表 差不多
L=[1,-9,-2,4,5,-7,-2] L.sort() #会改变原有L,该方法没有返回值(对比L.append()方法) print(L) L.sort(key=abs) #按照绝对值排序,会改变原列表 print(L) L1=[1,-2,-8,-5,3,-6,-7,2,-4] L2=sorted(L1) #会产生一个新的列表 print(L1) #并不会改变原有的列表 print(L2) L3=sorted(L1,key=abs) #不会改变原有列表,使用sorted函数关键字参数key,指定按照绝对值排序 print(L1) print(L3)
运行结果:
当然sorted()函数也可以接受reverse关键字参数,决定是否逆排序:
L=[1,2,-4,-7,8,-5] print(sorted(L,key=abs,reverse=True)) #不会改变原列表,产生一个新列表,按照abs对元素进行倒序排
运行结果:
talk is cheap,show me the code