2017-05-21 8 views
1

リスト内のすべての項目が素数であれば真を返すコードを書くのに成功しました。
私はこれがreduceの良い候補だと思います - これまでlambdaと一緒にreduceを使用しました - これは避けることが可能ですか?ラムダなしで減らす

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()プライムあるかどうかをテストすることを使用してにこのコードをリファクタリングすることもできます。 all()は、短絡するのでreduce()より優れています。

注:listは、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()'に返さなければなりませんが、あなたの例は 'reduce()'で動作しない 'func(int、int) - > str'です。 – AChampion

関連する問題