2013-08-08 2 views
1

목록의 모든 요소가 매개 변수의 요소인지 여부를 확인하는 메서드를 정의하려고합니다.정수 목록의 모든 요소에 대한 조건을 확인하려고합니다.

여기에 내가 가진 무엇 :

def factorall(x): 
if all(x % num for num in nums) == 0: 
    return True 
else: 
    return False 

그러나,이 숫자에 대해 true를 반환합니다 (이 경우 nums에서 1 내지 10의 정수의 목록입니다). 나는 이것이 단지 1을 체크하고 True를 리턴하기 때문에 발생한다고 가정하고 있지만, True를 리턴하기 전에리스트의 모든 엘리먼트를 검사하지 않아야 하는가?

나는 all()에 익숙하지 않으므로 아마 잘못 구현했을 것입니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

감사합니다.

+2

을 가져야한다'할 좋은 이유가없는 경우 foo는 : 반환 'foo'가 이미 부울이면 True'' else : False'를 반환합니다. 코드를 더 길게 만드는 것 (읽기 및 유지 관리가 더 어렵습니다). – abarnert

답변

2

당신은 all 함수 내에서 비교를 수행하거나 제거하고, 그 결과 x % num의 부정을 사용해야은 :

def factorall(x): 
    return all(not x % num for num in nums) 

return 문은 작동 동일 :

return all(x % num == 0 for num in nums) 

나는 두 번째 것이 더 명백하게 보인다는 것에 동의한다.

+0

왜 내가 포함하지 않아도 될지 혼란 스러워요. 설명해 주시겠습니까? 바보 같은 질문이라면 죄송합니다. – foobar1209

+0

@ RAF1940. 혼란스럽게 생각합니다. 'num'이'x' 요소이면 'x % num'은'0'이 될 것이고'all()'함수를 사용하고 있기 때문에 인자로'True'를 만들기 위해'not'를합니다. . 그리고 모든 숫자가 factor이면, 모든 값은'all()'에'True'가됩니다. –

+1

@ RAF1940 이것은'x % num == 0'을 사용하는 것과 비슷합니다. 'num'은'x'의 요소입니다. –

2
def factorall(x): 
    if all(x % num == 0 for num in nums): 
     return True 
    else: 
     return False 
+0

은 모두 내부에 0이 없다고 놓 쳤습니다. ( –

7

대신 모든

def factorall(x): 
    return not any(x%num for num in nums) #if any of these is a value other than 0 

not any를 사용하거나 당신처럼 원하는 경우 현재 그것을 보조 노트로

def factorall(x): 
    return all(x%num==0 for num in nums) 
+2

+1, 좋은 캐치 :) –

+0

'모든'유스 케이스가'any'로 구현 될 수 있는지 궁금합니다. 그렇다면 항상 더 좋지 않을까요? – RussW

+0

demorgans 법률은 그렇습니다 어떤 표정도 거꾸로 될 수 있다고 말합니다 ...하지만 나는 항상 당신이 표현하려고 노력하는 것에 달려 있다고 생각하지 않습니다. http://en.wikipedia.org/wiki/De_Morgan's_laws –

관련 문제