filter 过滤
def x_1(x): return x % 2 == 1 ret = filter(x_1,[1,2,3,4,5,6,67,78,8,9,]) for i in ret: print(i)
filter接收两个参数,第一个是函数名,不能加(),第二个是可迭代的。filter会将可迭代对象里面的所有参数输入函数中并进行过滤。(最后是通过最后返回的bool值来确定的)
我们也可以用列表推导式来完成这个效果,如:
print([i for i in [1,2,3,4,5,6,67,78,8,9,]if i % 2 ==1])
但是filter可以执行更加复杂的过滤,但是结果·都是一样的。
用处:我们可以用它来删除None和空字符串。
作业:取1——100中所有开根号后是整数的数。
from math import sqrt def b(x): return sqrt(x)%1==0 ret = filter(b,range(1,101)) for i in ret: print(i)
map
把每一个参数都已相应的处理函数进行迭代处理,map()函数接收两个参数,一个函数,一个是序列。map将传入的函数依次作用到序列的每一个元素,并将结果作为新的list给返回。
ret = map(abs,[-12,-234.123,-2,234]) print(ret) for i in ret: print(i)
sorted
参数说明:1.iterable:可迭代的
2.key:传入一个函数名,函数的参数是可迭代类型中的每一项,根据函数的返回值大小排序。
3,reverse:排序规则,reverse =Ture降序或者reverse = Flase升序,有默认值。
返回值,有序列表。
l = [12,23,1,123,423,1,123,12,12,-23,-1312,-321,-3] l.sort(key = abs) print(l)
原列表上进行排序
sorted
l = [12,23,1,123,423,1,123,12,12,-23,-1312,-321,-3] print(sorted(l))
l = [12,23,1,123,423,1,123,12,12,-23,-1312,-321,-3] print(sorted(l,key=abs,reverse=True))
优点:生成一个新列表,不改变原列表。
确定:占内存
总结
filter 执行了filter之后的结果结合<=执行之前的个数
filter只管筛选,不会改变原来的值。
map 执行前后元素个数不变
值可能发生变化(因为是对值进行操作并生成一个列表)