Pythonにおけるfilterの応用例−Etherふるい法による素数の求め

742 ワード

  • はmap()と同様であり、filter()も関数とシーケンスを受信する.map()とは異なり、filter()は入力された関数を各要素に順次作用させ、戻り値がTrueかFalseかに基づいて要素を保持または破棄するかを決定します.
  • は、filter()関数がIterator、すなわち不活性シーケンスを返すことに気づいているので、filter()に計算結果を完了させるには、list()関数ですべての結果を取得し、listを返す必要がある.
  • 運用:filterで素数
  • を求める
    def _int_iter():#      3         
        n = 1
        while True:
            n = n + 2
            yield n
     
    def  _not_divisible(n):#      
        return lambda x:x % n > 0
     
    def primes():
        yield 2          #     2
        it = _int_iter() #     
        while True:
            n = next(it) #          
            yield n
            it = filter(_not_divisible(n), it) #      
    for n in primes():#      ,               
        if n < 1000:
            print(n)
        else:
            break