のは、私はから10番目の要素を引くが、発電機は、次のようになり、私が書いた関数である最初の9を無視する発電機を持っているとしましょう今、私はそれを使用して、このようにそれのうち10番目のインデックスをつかむことができます。Pythonのジェネレータインデックスの最適化
myGen = myGenerator(list1, list2)
tenthElement = next(itertools.islice(myGen,10,11))
これは一度だけexpensiveOperation
10回を実行した場合、または私は思ったんだけど? (編集:10回呼びますが、この次の部分は私が興味を持っています) expensiveOperation
への他の9回の呼び出しを破棄して最適化する方法はありますか?
私は、ジェネレータ関数を使用しないで、私が望むものを与えてくれるいくつかの他の解決策を考えることができますが、構文は単に反復関数をジェネレータに変えるだけのクリーンではありませんreturn
をyield
に置き換えてください。
編集: ジェネレータを安価に「スクロール」する方法を探しているように、必ずしもこの特定の問題を解決するつもりはありません。私が現在作業している実際のケースでは、myGenerator
を初めて呼び出すときに、私が実際にどのインデックスを必要としているかわからない。私は第15指数、次に27位、次に82位をつかむかもしれません。私はおそらく、最初の呼び出しで15位にスライスする方法を考え出すことができましたが、次に次回は12個以上スクロールする必要があります。
'myGenerator'に' islice'機能を追加できますか? – eumiro