簡體   English   中英

遍歷列表並找到素數並添加到另一個列表

[英]Iterate through list and find prime numbers and add to another list

我想遍歷 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")

我的問題是總是添加不是素數的數字。 通常,代碼似乎也無法正常工作。

如果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")

出於學習目的,讓我們使用不同的方法。 首先,我建議您將試用分區代碼移動到其自己的謂詞 function is_prime()中,該謂詞返回 True 或 False,因此可以獨立於代碼的 rest 對其進行優化。

然后,我將讓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)

OUTPUT

% 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]
%

go 有很多方法可以解決這個問題,其中很多具有教育意義!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM