少しの背景:私は "Sieve of Eratosthenes"アルゴリズムをコーディングしようとしていました。 StackOverflow Pythonのchatroom上のいくつかの上級者(そして非常に患者さん)の要望で、私はenumerate()
関数を読んで、それを私のコードに組み込む方法を見つけました(はい、私は非常に初心者です)。これまでのところ、私の(実行可能な、リターンが期待レスポンス)コード次のようになります。言いたいことが私はPython関数の中にジェネレータを持っています。変更されたリストを返すにはどうしたらいいですか?
def SieveErat(n):
numbers = [False]*2+[True]*(n-1)
for index, prime_candidate in enumerate(numbers):
if prime_candidate == True:
yield index
for x in xrange(index*index, n, index):
numbers[x] = False
primes = []
for x in SieveErat(150000):
primes.append(x)
print primes[10002]
言うまでもなく、enumerate()
機能はそれほど厄介な私が前に持っていたものは何でもネストされたループよりも、この多くをコーディングます。しかし、私は関数に添付を含めることによって、このコードを短縮しようとしたとき、私はエラー - すなわち取得保管ので、私はまた、追加しようとした私は
File "SievErat.py", line 13
return numbers
SyntaxError: 'return' with argument inside generator
、何かについてenumerate()
を理解していないよということを恐れますすべてTrue
のリストの中にnumbers
初期化されたリストprimes
に、しかし運が見つかりませんでした。
ヒントやアドバイスは大歓迎です。
um ...あなたのコードには「戻り値」はありません。あなたが直面しているエラーを引き起こすコードを表示してください。 –
をpythonで3.3より前のものにすると、 'return'と 'yield'を同じ関数で使うことはできません。python 3.3+では、ジェネレータコンテキストでは全く別のものを意味します(http://stackoverflow.com/questions/16780002/)。 return-in-generator-with-python-3-3) –