2013-03-01 6 views
0

사용하지 않고 목록에서 짝수를 확인하는 방법이 있습니까?없이 짝수 체크 : 만약

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

입니다. 그래서 루핑을 계속하는 이유입니다. – squiguy

+0

엄밀히 말하면,'if' 이외의 방법은 없습니다. 왜냐하면리스트의 이해력을 사용한다고해도'[x는 x % 2 == 0 인 경우 숫자에 x를 넣을 것입니다. '] 또는 'filter (lambda x : x % 2 == 0, numbers)' –

+1

왜 if를 사용하지 않을 것인가? 나는 체크 아웃 할 것이다 [이 질문] (http://codereview.stackexchange.com/questions/8403/python-check-if-number-is-divisible-by-2-program) – xxmbabanexx

답변

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 –

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) 

짝수 다움에 대한 대안 체크 i` 수 결코 동일한`I/2`,`잘

not my_test_number&1 

(I이 검사가 i%2보다 빠른 생각,하지만 확실하지)

+1

나는 너무 많은 암시적인'if's set solution에 관련되어 있습니다. – mgilson

+0

아마 오른쪽 :) 실제 진술의 조건은 더 나은 표현일지도 모릅니다 ... –