python求素数

下面这个函数式不是很明白
print reduce(lambda l,y:not 0 in map(lambda x:y % x, l) and l+[y] or l,xrange(2,1000), [] )
那个not…in…的写法是怎么回事?lambda表达式冒号后面的部分是怎么理解呢?

not 0表示非0 返回真,0返回假
print reduce(
lambda l,y: #递减的操作函数
(not 0 in map(lambda x:y % x, l)) and (l+[y]) or l, #l是一个列表[], 结果l中后加入的数不能被前数整除,被整除则不添加后数
xrange(2,1000), #范围[2,1000)
[] )

过程是:
测试到6, 就把6依次整除之前的l=[2,3,5] ,除2余0,就放弃6。l仍是[2,3,5]
测试到7, 就把7依次整除之前的l=[2,3,5] ,除2都不余0,加入6。l变成[2,3,5,7]
最后得到一个纯素数的列表[];
温馨提示:答案为网友推荐,仅供参考