pythonで素数表を出力(あと内包表記についてちょっと)
投稿日: 2013/02/01 カテゴリー: programing, python, 全投稿 | Tags: エラトステネスの篩, ジェネレーター, 素数表, math, programing, python, 内包表記 コメントするimport math def prime(n): l = range(n) l[1] = 0 for i in l: if not i: #0だったら次の数字へ continue elif i > math.sqrt(n): #nの平方根より小さかったら終了 return [p for p in l if p] #0以外のものを返す else: for m in range(i*2, n, i): l[m]=0
引数までの素数リストを返す。
returnのところの[]を()に変えるとなぜかジェネレーターが生成される。
>>> (i for i in range(10)) <generator object <genexpr> at 0x10bc68280> >>> {i for i in range(10)} set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
どうもタプル内包表記(?)みたいな書き方をするとジェネレーターになるっぽい
どうやらジェネレーター式というらしい