继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

[硕.Love Python] 求10000以内所有素数

程序员硕
关注TA
已关注
手记 19
粉丝 1.7万
获赞 886

1.题目: 求10000以内所有素数.

2.源码:

reduce(lambda a, x: all(x % t for t in a) and a.append(x) or a, xrange(2, 10000), [])

3.思路: 面对一个未检测是否为素数的x, 用之前已找到的所有素数(收集在列表a中), 依次尝试能否整除x, 如果全都不能整除则说明x为素数, 此时将x添加到列表a中.循环上述过程检测10000内的每一个数.

打开App,阅读手记
17人推荐
发表评论
随时随地看视频慕课网APP

热门评论

3.再看老师的,太长了看着晕,拆一下

def func(a,x):
    return all(x%t for t in a) and a.append(x) or a
print reduce(func,xrange(2,10000),[])

reduce怎么还有一个参数,之前看的类型都是两个啊

查了一下,第三个参数是设置运算的初始值,上来就把[]给a,之后的返回值就都是数组类型了。

第一轮

a=[]
print all(2%t for t in a) and a.append(2) or a

使用初始值,a=[]

由于a是[],所以all([])为True,然后添加2到数组,返回a

第二轮

a=[2]
print all(3%t for t in a) and a.append(3) or a

第三轮

a=[2,3]
print all(4%t for t in a) and a.append(4) or a

这里all()返回False,直接短路跳过append,返回数组

最大难点,and用来短路append添加数组,而a.append()返回结果必然是0,然后用or保证能够返回数组a


4.我刚才的方法和老师效率差多少呢?

method_1: 0.687256097794
method_2: 0.103365898132

大概7倍


3.再看老师的,太长了看着晕,拆一下

def func(a,x):
    return all(x%t for t in a) and a.append(x) or a
print reduce(func,xrange(2,10000),[])

reduce怎么还有一个参数,之前看的类型都是两个啊

查了一下,第三个参数是设置运算的初始值,上来就把[]给a,之后的返回值就都是数组类型了。

第一轮

a=[]
print all(2%t for t in a) and a.append(2) or a

使用初始值,a=[]

由于a是[],所以all([])为True,然后添加2到数组,返回a

第二轮

a=[2]
print all(3%t for t in a) and a.append(3) or a

第三轮

a=[2,3]
print all(4%t for t in a) and a.append(4) or a

这里all()返回False,直接短路跳过append,返回数组

最大难点,and用来短路append添加数组,而a.append()返回结果必然是0,然后用or保证能够返回数组a


4.我刚才的方法和老师效率差多少呢?

method_1: 0.687256097794
method_2: 0.103365898132

大概7倍


lambda a, x: all(x % t for t in a) and a.append(x) or a
老师没看懂这个

查看全部评论