首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么方法可以在Python中压缩for-else循环吗?

有什么方法可以在Python中压缩for-else循环吗?
EN

Stack Overflow用户
提问于 2017-10-07 15:41:30
回答 3查看 113关注 0票数 0

我已经做了一段代码,把素数喷出到10001个数字。它目前占用了4行代码,并想知道我是否可以进一步压缩它?它就在这里;

代码语言:javascript
复制
for i in range(3,104744,2):
    for x in range(3,int(i/2),2):
        if i % x == 0 and i != x: break
    else: print(i)

意识到,过多地压缩代码通常不是一件好事,但我想知道这是否可能。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-10-07 16:27:25

您可以使用列表理解和any来获得一条龙解决方案:

代码语言:javascript
复制
>>> [p for p in range(2, 100) if not any (p % d == 0 for d in range(2, int(p**0.5) + 1))]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

它使用的事实是,除数不能大于它除数的平方根。

它似乎运转良好:

代码语言:javascript
复制
>>> len([p for p in range(2, 104744) if not any (p % d == 0 for d in range(2,int(p**0.5)+1))])
10001
票数 0
EN

Stack Overflow用户

发布于 2017-10-07 16:35:27

列表理解

代码语言:javascript
复制
>>> r=range(2,100)
>>> [p for p in r if [p%d for d in r].count(0)<2]

2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、53、59、61、67、71、73、79、83、89、97

票数 0
EN

Stack Overflow用户

发布于 2017-10-07 16:42:12

试试这个:

代码语言:javascript
复制
for i in range(3,100,2):
    if all( i%x for x in range(3, i//2, 2) ):
        print(i)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46622061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档