Python3.5-内建函数filter的理解应用
望共同进步
转载请注明地址:http://blog.csdn.net/weixin_39701039/article/details/79558279
Python 内建函数filter()属于过滤序列,其接收一个函数和一个序列(filter(function,iterable)),filter()把
传入的函数一次作用于每个元素,然后根据返回值Ture和False决定保留还是丢弃,即实现了过滤功能:
例1.在一个list中,保留3的倍数的数:
#coding:utf-8 #python3.5.1 list1 = [1,2,3,4,5,6,7,8,9,10,11] #定义函数,如果是3的倍数,返回True;反之,返回False def is_triple(n): return n%3 ==0 #filter()传入function,序列 get = filter(is_triple,list1) #注意到filter()函数返回的是一个Iterator(迭代器),迭代器为一个惰性序列,所以用list()来强迫其完成计算结果 list_get = list(get) print(list_get)
#结果:
[3, 6, 9]
例2:之前在我的博客Python3.5 处理文本txt,删除不需要的行 http://blog.csdn.net/weixin_39701039/article/details/79550067 判断一系列,然后在将需要的结果累加,再写入到文件中,显得有些麻烦,突然看到一个来自“好奇的大白”的评论发现用filter来处理就简单的多了
这里我把代码进行处理加了下注释:
#coding:utf-8 #python3.5.1 def func(line): #排除空行 if not line.rstrip(): return False else: #根据规则分割得到字符串 str_get = line.split(',')[-1] #将字符串转换为数字 num = float(str_get) if 12.500 > num > 9.500: return True with open(r"G:\任务20180312\test/filter.txt", 'w') as f: f.writelines(list(filter(func, open(r'G:\任务20180312\test/handle1.txt'))))
图1,是处理前的txt,图二是处理后的txt
图1:
图2:
望有所帮助,望采纳!!