在用python3求0~n之间的素数时,关于filter用法的有点模糊,于是上网查了一下filter用法。
求0~n之间素数的脚本prime.py:
1 def f(x): 2 plist = [0,0] + list(range(2,x+1)) 3 for i in range(2,x): 4 if plist[i]: 5 plist[i+i::i] = [0]*len(plist[i+i::i]) 6 return filter(None,plist) 7 print(list(f(1000)))
关于filter不是太明白,于是上网查了一下,很多人说当filter(None,list)时,返回的就是iterable本身,但是在本例中明显不是返回list本身的;
于是去查了下filter的模块介绍:
1 >>>help(filter) 2 class filter(object) 3 | filter(function or None, iterable) --> filter object 4 | 5 | Return an iterator yielding those items of iterable for which function(item) 6 | is true. If function is None, return the items that are true. 7 | 8 | Methods defined here:
红色字体明确说明:当function时None时,返回的是Ture的item
举下列说明:
>>>list = [1,2,0,4,0,7] >>>list(filter(None,list)) [1,2,4,7]