遍历列表并找到素数并添加到另一个列表

问题描述 投票:0回答:3

我想在 python 中迭代一个列表,检测素数,然后将它们添加到另一个列表中。

primes = []
nprimes = []
for j in range(0, len(arr)):
    num = arr[j] #my list with numbers to check 

    if num > 1:
        for k in range(2, num):
            if (num % k) == 0:
                nprimes.append(num)
                break
            else:
                primes.append(num)
               
    else:
        print(num, " can't be checked, because its smaller than 1")

我有一个问题,总是添加不是素数的数字。一般来说,代码似乎无法正常工作。

python arrays python-3.x list primes
3个回答
2
投票

如果

num % k == 0
是假的,你不能直接说它是
prime
,你必须等待整个循环,所以用for循环移动
else
,它会在没有遇到
break
时执行意味着它是主要的

  • 您可以直接迭代值
    for num in arr
  • 你可以在
    sqrt(num)
    处停止循环,之后你将找不到新的除数
for num in arr:
    if num > 1:
        for k in range(2, int(num ** 0.5) + 1):
            if num % k == 0:
                nprimes.append(num)
                break
        else:
            primes.append(num)
    else:
        print(num, " can't be checked, because its smaller than 1")

0
投票

出于学习目的,让我们尝试不同的方法。 首先,我建议您将试除法代码移至其自己的谓词函数中,该函数返回 True 或 False,因此可以独立于代码的其余部分进行优化。

然后,我将 

is_prime()

将列表分为素数和非素数序列,我们将它们拼接到适当的列表上:

itertools.groupby

输出

def is_prime(number): if number < 2: return False if number % 2 == 0: return number == 2 for divisor in range(3, int(number ** 0.5) + 1, 2): if number % divisor == 0: return False return True if __name__ == "__main__": from random import sample from itertools import groupby array = sample(range(1, 100), 15) primes = [] composites = [] for are_prime, numbers in groupby(array, is_prime): if are_prime: primes.extend(numbers) else: composites.extend(numbers) print("Numbers:", array) print("Primes:", primes) print("Composites:", composites)

解决这个问题的方法有很多,其中很多都是有教育意义的!


0
投票

% python3 test.py Numbers: [91, 87, 10, 2, 11, 24, 21, 12, 46, 61, 15, 32, 57, 22, 5] Primes: [2, 11, 61, 5] Composites: [91, 87, 10, 24, 21, 12, 46, 15, 32, 57, 22] %

	
© www.soinside.com 2019 - 2024. All rights reserved.