2013-03-02 61 views
3

我见过很多不同的方式来同时突破两个嵌套循环,但是对于我的代码来说最快和最简单的方法是什么?Double Break out嵌套循环

primes = [2] 
for a in range(3, 500, 2): 
    for b in range(2, int(a ** 0.5 + 0.5)): 
     if a % b != 0: 
      primes.append(a) 
     if a % b == 0: 
      [x for x in primes if x != a] 
      # double break 
+1

我不是很确定你想要实现这个代码是什么,但我敢肯定你写不这样做的。列表理解没有做任何事情,名为“素数”的列表不会包含素数。考虑编写一个函数'is_prime(p)'来测试单个值是否为素数,然后就不需要从嵌套循环中分离出来。 – Duncan 2013-03-02 12:45:30

+0

我知道@Duncan,我现在已经意识到了,不过谢谢你的答案 – awsomeguy 2013-03-02 12:52:07

+0

LewisC,我有一个关于你的代码算法的答案,而不是双重嵌套循环的问题。但此线程已关闭。我怎么能把它发布给你? – eyquem 2013-03-03 22:38:43

回答

3

把循环的功能和使用return关键字:

def func(primes): 
    for a in range(3, 500, 2): 
     for b in range(2, int(a ** 0.5 + 0.5)): 
      if a % b != 0: 
       primes.append(a) 
      if a % b == 0: 
       [x for x in primes if x != a] 
       return 

primes = [2] 
func(primes) 

这往往是一件好事,当它使程序员编写模块化的代码。

0

重构双循环作为函数并使用return突围。

0

如果你不想使用一个函数,你可以使用一个变量。这是flag

primes = [2] 
    flag = 0 
    for a in range(3, 500, 2): 
     for b in range(2, int(a ** 0.5 + 0.5)): 
      if a % b != 0: 
       primes.append(a) 
      if a % b == 0: 
       [x for x in primes if x != a] 
       flag = 1 
       break 
     if flag: 
      break