【问题标题】:Using while to iterate through a list with a condition?使用 while 遍历有条件的列表?
【发布时间】:2017-09-07 02:10:34
【问题描述】:

我正在尝试遍历素数列表,但我想在达到某个限制时停止。

def primetest(number,primelst):
    limit = int(round(sqrt(number),0)+1)
    while prime in primelst < limit:
        if (number % prime) == 0:
            return False
    return True

作为 FOR 语句,这是有效的:

def primetest(number,primelst):
    limit = int(round(sqrt(number),0)+1)
    for prime in primelst:
        if (number % prime) == 0:
            return False
    return True

但这很慢,因为它遍历所有素数,我希望迭代在达到极限时停止。所以while 语句似乎是更好的选择,但我无法弄清楚正确的语法。

【问题讨论】:

    标签: python list while-loop


    【解决方案1】:

    只需在循环体中添加一个检查:

    for prime in primelst:
        if prime > limit:
            break
        # ...
    

    更新:我最初建议使用enumerate,但我看到你实际上想在质数大于limit时停止循环。

    【讨论】:

      【解决方案2】:

      如果您坚持使用 while,则可以通过这种方式循环可能适用于您的情况:

      def primetest(number,primelst):
          i=0
          limit = int(round(sqrt(number),0)+1)
          while primelst[i] < limit:
              if (number % primelst[i]) == 0:
                  return False
              i=i+1
          return True
      

      【讨论】:

      • 感谢您的建议 - 但由于我的素数列表是根据此函数的结果添加到的,因此增加索引然后测试 primelst[i] 会产生“超出范围”错误.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2017-03-05
      • 2021-10-24
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多