2013-03-01 22 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

相关问题