簡體   English   中英

Python-檢查列表中的數字是否為數字的因數

[英]Python - Check if numbers in list are factors of a number

我有一個數字listintegers )(例如,從1到10)。

它們不一定是連續的,但它們是按升序排列的。

我已經多次提示用戶輸入可用數字的選擇。 輸入該數字后,會將其連同可能存在的所有因素從列表中刪除。

我已阻止用戶選擇素數。 但是,在某個時間點上可能存在非質數,沒有余數。

我是Python的新手,因此無法實現:

  • 檢查所選數字是否沒有剩余因子(即使它不是素數)。

  • 檢查是否僅保留質數或無因數的數。

我正在考慮使用for語句,但不確定如何實現它們。 誰能提供建議或代碼? 提前致謝...

要檢查是否存在剩余數字guess任何因素,可以使用any()

hasfactors = any(guess % n == 0 for n in numbers)

要檢查所有剩余數字是否均為質數,可以使用all() (由於您已經說過您已經禁止用戶輸入質數,所以我假設您具有某種isprime()函數):

onlyprimes = all(isprime(n) for n in numbers)

對於第一個問題,您可以使用列表推導來構建新列表,其中每個元素都不是所選的數字,也不是所選數字的因數(請參見代碼)。 將此與原始列表進行比較。

$ python
>>> selected_number = 6
>>> [x for x in range(1,11) if selected_number % x]
[4, 5, 7, 8, 9, 10]

對於第二個問題,請檢查每個元素是否為質數。 如果不是,請檢查沒有因素的數字。 對於每一個元素,你可能mod在最初的名單,並檢查它是否是零的列表。 不過,我敢肯定有一種更快的方法。

如果L是非零數字的列表,則作為數字N的因子的列表為:

factors = [x for x in L if N % x == 0]

當然,如果N在L中沒有因子,則該列表將只是空的。

我不確定您所說的“無因子數”是什么意思,除非您說“素數”(?)-在Python中檢查素數有一些SO問題和答案,我會使用gmpy.is_prime (來自擴展名gmpy ),但是我當然有偏見;-)。

如果您的意思是“所有在L中沒有因數的數字”,那么,有無數個,因此很難列出所有這些。 他們的無限生成器:

import itertools

def nofactorsinlist(L):
  for i in itertools.count():
    if any(x for x in L if i % x == 0):
      continue
    yield i

可能會有一些優化,但是這確實很簡單,我不願意添加復雜的優化而又不完全了解您的追求!-)

暫無
暫無

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

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