2010-03-14 79 views
0

的因素我有數字的listintegers)(比方說,從1到10)。Python的 - 檢查列表中的號碼是一個號碼

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

我已經提示用戶多次輸入可用數字的選擇。當輸入該號碼時,將從列表中刪除該號碼及其可能存在的任何因子

我已阻止用戶選擇素數。但是,在某個時間點,那裏可能有非素數,這些數字沒有剩餘因素。

我是比較新的Python的,所以我在實施麻煩:

  • 檢查,如果選擇的號碼有沒有剩餘的因素(即使它不是素數)。

  • 檢查是否只有素數仍然存在,或不 因素號碼。

我在想使用for語句,但我不確定如何實現它們。任何人都可以提供建議或代碼嗎?在此先感謝...

回答

3

要檢查是否有數量guess的剩餘可使用any()任何因素:

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

要檢查所有的剩餘數是素,all()可以使用。 (既然你說你已經阻止用戶從輸入素數我假設你有某種isprime()功能):

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

所有的意見是有益的,但我利用你的OnlyPrimes方法,找到了所有()方法方便其他用途。謝謝!你預測是正確的,我有一個IsPrime()函數... – Zach 2010-03-14 22:53:03

2

對於第一個問題,你可以使用列表解析來建立一個新的列表,其中每個元素是沒有選擇數量的因素(見代碼)選擇的數量,而不是。將此與您的原始列表進行比較。

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

對於第二個問題,檢查每個元素是否爲素數。如果不是,請檢查沒有因素的數字;對於每個元素,您可能會在原始列表上檢測mod,並檢查它是否爲零列表。不過,我確信有更快的方法。

1

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

一些優化將是可能的,但是這是一個很簡單的,我不願意添加複雜的優化,而不理解它是你後到底是什麼! - )