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