Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用next()方法在给定列表的元素上循环到一定数量_Python_Algorithm - Fatal编程技术网

Python 使用next()方法在给定列表的元素上循环到一定数量

Python 使用next()方法在给定列表的元素上循环到一定数量,python,algorithm,Python,Algorithm,我想得到自然数n在2和n之间(对于n是一个大数)的不同素数因子的数目。为此,我想首先创建一个素数列表。然后,为了得到n的不同素数因子的列表,检查列表中的素数,直到n的平方根除以n。如果素数除以n,则检查列表中的下一个 这就是我所尝试的: def prime_eratosthenes(n): not_primes = [] for i in range(2, n+1): if i not in not_primes: #print (i)

我想得到自然数n在2和n之间(对于n是一个大数)的不同素数因子的数目。为此,我想首先创建一个素数列表。然后,为了得到n的不同素数因子的列表,检查列表中的素数,直到n的平方根除以n。如果素数除以n,则检查列表中的下一个

这就是我所尝试的:

def prime_eratosthenes(n):
    not_primes = []
    for i in range(2, n+1):
        if i not in not_primes:
            #print (i)
            for j in range(i*i, n+1, i):
                not_primes.append(j)                
    return [item for item in range(2,n) if item not in  set(not_primes)]

n=100
L = prime_eratosthenes(n)

def num_primefactors(n):
  prime_div=[]

  x=L[0]
  while x*x<=n:
    if n%x==0:
      n=n//x
      prime_div.append(x)
    x=next(L)

  return len(prime_div) 

num_primefactors(14)
def prime_eratosthenes(n):
非素数=[]
对于范围(2,n+1)内的i:
如果我不在not_素数中:
#印刷品(一)
对于范围内的j(i*i,n+1,i):
非素数。附加(j)
return[如果项目不在集合中,则范围(2,n)内项目的项目(非\u primes)]
n=100
L=素数(n)
def num_primefactors(n):
prime_div=[]
x=L[0]
而x*x
请注意,
用于。。。在L
中,在
L
上构造一个迭代器。没有必要创建和安装自己的工具

下面是循环的重建,执行“手动”迭代:

prime_stream = iter(L)
factor = next(prime_stream)
while factor * factor <= n:
    if n % factor == 0:
        prime_div.append(factor)
        n //= factor
    factor = next(prime_stream, n+1)  # Ensures loop exit when we run out of primes

return len(prime_div)
prime\u-stream=iter(L)
系数=下一个(基本流)
而因子*因子
请注意,
用于。。。在L
中,在
L
上构造一个迭代器。没有必要创建和安装自己的工具

下面是循环的重建,执行“手动”迭代:

prime_stream = iter(L)
factor = next(prime_stream)
while factor * factor <= n:
    if n % factor == 0:
        prime_div.append(factor)
        n //= factor
    factor = next(prime_stream, n+1)  # Ensures loop exit when we run out of primes

return len(prime_div)
prime\u-stream=iter(L)
系数=下一个(基本流)

而factor*factor没有列表的
next()
。您的方法返回整个列表。只需使用
for
循环来迭代元素。列表中没有
next()
。您的方法返回整个列表。只需使用
for
循环来迭代元素。谢谢。。。我的术语不好。“in L”提供了迭代器。谢谢。。。我的术语不好。“in L”提供迭代器。
prime_stream = iter(L)
factor = next(prime_stream)
while factor * factor <= n:
    if n % factor == 0:
        prime_div.append(factor)
        n //= factor
    factor = next(prime_stream, n+1)  # Ensures loop exit when we run out of primes

return len(prime_div)