2013-03-01 37 views
0

有沒有辦法檢查一個列表中的偶數而不使用:if?偶數檢查沒有:如果

在這裏我有什麼,當我使用if:

import numbers 

numbers = [ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15, 
      16,17,18,19,20,21,22,23,24,25,26,27,28,29,30] 

def even_list(numbers): 
for i in range(len(numbers)): 
    if i % 2 == 0: 
    #while i !=(i/2): 
     print(i) 
return i 

numbers = even_list(numbers) 

現在在邏輯上這是有意義的,但我不知道是否比其它任何其他方式。 正如你所看到的,我嘗試在那裏使用,並且程序在運行時保持循環1。 關於如何解決這個問題的任何想法?

+1

好,'i'絕不能等於'I/2'。所以這就是它保持循環的原因。 – squiguy 2013-03-01 00:19:29

+0

從技術上講,除了'if'之外,沒有其他辦法,因爲即使你使用列表理解,也會有一個if:'[x for x in numbers if x%2 == 0]',或者如果你使用過濾器,有一個條件,這不過是一個暗示,如果:'過濾器(lambda x:x%2 == 0,數字)' – 2013-03-01 00:19:37

+1

爲什麼你不想使用if?我會檢查出[這個問題](http://codereview.stackexchange.com/questions/8403/python-check-if-number-is-divisible-by-2-program) – xxmbabanexx 2013-03-01 00:20:08

回答

4

你可以使用兩個列表,一個是雙數,一個用於賠率:

evens = [] 
odds = [] 
out = [evens,odds] 
for elem in numbers: 
    out[elem%2].append(elem) 

print evens 

,或者你可以用結束:

for even in evens: 
    print even 

模擬輸出,你有現在的風格相同。

+0

這樣可以更好地避免隱含的ifs :) +1 – 2013-03-01 00:42:05

2

def even(numbers): 
    return filter(lambda n:n%2==0,numbers) 

或numpy的

import numpy 
a = numpy.arange(100) 
print a[a%2==0] 

或設置操作(我認爲只有一個這並不使用條件......但你需要了解套或者您可能沒有得到預期的行爲,或者它可能不適用於您的數據集)

def evens(numbers): 
    all_evens = set(range(0,max(numbers),2) 
    return all_evens.intersection(numbers) 

甚至岬替代檢查

not my_test_number&1 

(我懷疑這張支票比i%2快,但不知道)

+1

我確信有很多隱式的'if's與set解決方案有關。 – mgilson 2013-03-01 00:38:14

+0

可能是正確的:) theres只是在實際陳述中沒有條件可能是一個更好的措詞... – 2013-03-01 00:40:35

相關問題