2017-05-21 1 views
1

목록에있는 모든 항목이 소수 일 경우 참을 반환하는 코드를 작성하는 데 성공했습니다.
나는 이것이 reduce에 대한 좋은 후보자라고 생각한다 - 지금까지 lambda과 함께 reduce만을 사용했다. - lambda을 피하고 직접 기능을 사용할 수 있습니까? 숫자가 소수와 숫자의 목록 all() 소수 경우 다음 테스트하기 위해 그것을 사용하는 경우람다없이 줄임

def is_prime(list): 
    np = "Prime" 
    for n in list: 
     if n < 2: 
      np = "NonPrime" 
      print np 
      # return np 
     else: 
      for i in range(3, n): #int(math.sqrt(n)) 
       if n % i == 0: 
        np ="NonPrime" 
        print np 
    return np 
+0

예. 'lambda'를 사용할 수있는 곳이면 어디서나'def'로 정의 된 정상적인 함수를 사용할 수 있습니다. 그 반대는 사실이 아닙니다. –

답변

3

당신은 확인이 코드를 리팩토링 할 수 있습니다. all()은 단락 될 것이므로 reduce()보다 좋을 것입니다.

참고 : 을 변수 또는 인수로 사용하면 python 기본 유형이 숨겨 지므로 사용하지 않아야합니다.

: 당신이 정말로 다음 reduce()으로이를 구현하고 싶었

def is_prime(n): 
    if n < 2: 
     return False 
    for i in range(3, n): #int(math.sqrt(n)) 
     if n % i == 0: 
      return False 
    return True 

def all_primes(iterable): 
    return all(is_prime(n) for n in iterable) 

>>> all_primes([2,3,5,7]) 
True 
>>> all_primes([2,3,5,8]) 
False 

, 당신은 효과적으로 and를 사용하여 단일 부울에 논리 값의 목록을 줄일 수있다는 operator 모듈에 정의 된 and에 대한 운영자, operator.and_있다

from functools import reduce # Py3 
import operator as op 

def all_primes(iterable): 
    return reduce(op.and_, (is_prime(n) for n in iterable)) 
+0

@joe 내 대답을 편집하지 마십시오. 질문을 명확히하기 위해 업데이트하십시오. 내가 당신의 편집을 검토 한 결과'reduce()'가'func (func (a, b, c))'와 얼마나 유사한 지 오해 한 것 같습니다. 그래서'func()'는'func()'에 유효한 arg를 반환해야하지만, 여러분의 예제는'reduce()'에서 작동하지 않는'func (int, int) -> str'입니다. – AChampion

관련 문제