python学习笔记 day16 几个重要的内置函数

enumerate():  枚举,返回元素和该元素的索引

L=[1,2,3,4]
for index,item in enumerate(L):
    print(index,item)

运行结果:

python学习笔记 day16 几个重要的内置函数

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

运行结果:

python学习笔记 day16 几个重要的内置函数

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)

运行结果:

python学习笔记 day16 几个重要的内置函数

 如果两个可迭代对象长度不匹配,就是个数不一致,zip()函数就只会按照长度小的那个组合,其他的不再输出:

L1=[1,2,3]
L2=['hello','xuanxuan','你好','璇璇']
ret=zip(L1,L2)
print(zip)  #zip()函数返回一个迭代器
for i in ret:
    print(i)

运行结果:

python学习笔记 day16 几个重要的内置函数

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)

python学习笔记 day16 几个重要的内置函数

 或者使用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)

运行结果:

python学习笔记 day16 几个重要的内置函数

如果有一个需求:需要过滤掉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)

运行结果:

python学习笔记 day16 几个重要的内置函数

返回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)

运行结果:

python学习笔记 day16 几个重要的内置函数

map(): 接受一个函数,和一个可迭代对象,返回一个迭代器,相当于把函数作用于可迭代对象的每一个元素,然后按照某种约定的函数规则返回

比如,使用map()函数返回列表中元素的绝对值

generator=map(abs,[1,2,-3,4,-5,-7])
print(generator)  #map()函数返回一个迭代器
print(generator.__next__())
print('*********')
for i in generator:
    print(i)

运行结果:

python学习笔记 day16 几个重要的内置函数

 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)

运行结果:

python学习笔记 day16 几个重要的内置函数

当然sorted()函数也可以接受reverse关键字参数,决定是否逆排序:

L=[1,2,-4,-7,8,-5]
print(sorted(L,key=abs,reverse=True))   #不会改变原列表,产生一个新列表,按照abs对元素进行倒序排

运行结果:

python学习笔记 day16 几个重要的内置函数