タグ付けされた質問 「generator」

ジェネレータは、主にイテレータの記述を簡略化するために使用されるサブルーチンの一般化です。ジェネレーターのyieldステートメントは、ジャンプ先のコルーチンを指定せず、親ルーチンに値を返します。


10
XMLインスタンスドキュメントからXSDスキーマを生成するツールはありますか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善したいですか?Stack Overflowのトピックとなるように質問を更新します。 6年前休業。 この質問を改善する XMLインスタンスドキュメントを取得し、対応するXSDスキーマを出力するツールを探しています。 生成されたXSDスキーマは、手動でスキーマを作成する場合と比べて制限されることは確かです(おそらく、オプション要素や繰り返し要素、またはデータ制約を処理しないでしょう)が、少なくとも素早い出発点としては機能します。
146 xml  xsd  schema  generator 



7
無限ジェネレーターの式はありますか?
無限要素を生成できる単純なジェネレータ式はありますか? これは純粋に理論的な質問です。ここに「実用的な」答えは必要ありません:) たとえば、有限ジェネレータを作成するのは簡単です。 my_gen = (0 for i in xrange(42)) ただし、無限のものを作成するには、偽の関数で名前空間を「汚染」する必要があります。 def _my_gen(): while True: yield 0 my_gen = _my_gen() 別のファイルで処理を行い、import後で-ing することは考慮されません。 私はそれitertools.repeatがまさにこれを行うことも知っています。それなしでワンライナーソリューションがあるかどうか私は興味があります。

12
同等のC ++からPythonジェネレーターへのパターン
C ++で模倣する必要があるPythonコードの例をいくつか持っています。特定のソリューション(コルーティンベースの歩留まりソリューションなど、それらは許容できる回答ですが)は必要ありません。何らかの方法でセマンティクスを再現する必要があるだけです。 パイソン これは基本的なシーケンスジェネレーターであり、実体化されたバージョンを格納するには明らかに大きすぎます。 def pair_sequence(): for i in range(2**32): for j in range(2**32): yield (i, j) 目標は、上記のシーケンスの2つのインスタンスを維持し、それらをセミロックステップでチャンクで反復処理することです。以下の例ではfirst_passバッファを初期化するための対の配列を使用し、そしてsecond_pass再生する同じ正確な配列をし、再度バッファを処理します。 def run(): seq1 = pair_sequence() seq2 = pair_sequence() buffer = [0] * 1000 first_pass(seq1, buffer) second_pass(seq2, buffer) ... repeat ... C ++ C ++のソリューションで見つけることができる唯一のことはyield、C ++コルーチンを模倣することですが、これを行う方法に関する適切なリファレンスは見つかりませんでした。この問題の代替(一般的ではない)ソリューションにも興味があります。パス間でシーケンスのコピーを保持するのに十分なメモリバジェットがありません。



3
Python:再帰アルゴリズムをジェネレータとして使用する
最近、私は重要な制約を持つ特定のシーケンスを生成する関数を書きました。問題は、自然な再帰的な解決策で発生しました。今では、比較的小さな入力の場合でもシーケンスが数千になるため、すべてのシーケンスをリストに入力するのではなく、アルゴリズムをジェネレーターとして使用したいと思います。 例を示します。再帰関数で文字列のすべての順列を計算したいとします。次の単純なアルゴリズムは、追加の引数「ストレージ」を取り、それが見つかるたびに置換を追加します。 def getPermutations(string, storage, prefix=""): if len(string) == 1: storage.append(prefix + string) # <----- else: for i in range(len(string)): getPermutations(string[:i]+string[i+1:], storage, prefix+string[i]) storage = [] getPermutations("abcd", storage) for permutation in storage: print permutation (非効率性については気にしないでください。これは単なる例です。) 次に、関数をジェネレーターに変換します。つまり、ストレージリストに追加するのではなく、順列を生成します。 def getPermutations(string, prefix=""): if len(string) == 1: yield prefix + string # <----- else: …

8
Python空のジェネレーター関数
Pythonでは、次のように関数の本文にyieldキーワードを置くことで、イテレータ関数を簡単に定義できます。 def gen(): for i in range(100): yield i 値を生成しない(0値を生成する)ジェネレーター関数を定義するには、次のコードは機能しません。Pythonは、それがジェネレーターであり、通常の関数ではないことを認識できないためです。 def empty(): pass 私は次のようなことができました def empty(): if False: yield None しかし、それは非常に醜いでしょう。空のイテレータ関数を実現する良い方法はありますか?
97 python  generator 

8
Python:ジェネレータ式と収量
Pythonでは、ジェネレーター式を介してジェネレーターオブジェクトを作成することと、yieldステートメントを使用することの間に違いはありますか? 利回りの使用: def Generator(x, y): for i in xrange(x): for j in xrange(y): yield(i, j) ジェネレータ式を使用する: def Generator(x, y): return ((i, j) for i in xrange(x) for j in xrange(y)) どちらの関数も、(0,0)、(0,1)などのタプルを生成するジェネレーターオブジェクトを返します。 どちらか一方の利点はありますか?考え? みんなありがとう!これらの回答には多くの優れた情報と参考文献があります!

17
反復可能オブジェクトを一定サイズのチャンクに分割する方法
重複の可能性: Pythonでリストを均等なサイズのチャンクに分割するにはどうすればよいですか? iterableを入力として受け取り、iterableのiterableを返す「バッチ」関数が見つからなかったことに驚いています。 例えば: for i in batch(range(0,10), 1): print i [0] [1] ... [9] または: for i in batch(range(0,10), 3): print i [0,1,2] [3,4,5] [6,7,8] [9] さて、私は非常に単純なジェネレーターだと思ったものを書きました。 def batch(iterable, n = 1): current_batch = [] for item in iterable: current_batch.append(item) if len(current_batch) == n: yield current_batch current_batch = [] …

6
`rails generate controller`のテスト、アセット、ヘルパーの作成をスキップする構文?
ヘルプを読み、次のコマンドを試して、テスト、アセット、ヘルパーファイルの生成をスキップしました $ bin/rails generate controller home index --helper false --assets false --controller-specs false --view-specs false create- app/controllers/home_controller.rb route get "home/index" invoke erb create app/views/home create app/views/home/index.html.erb invoke rspec error false [not found] error false [not found] あなたはこの作品を超える出力で気づく&のみ可能としてcontroller, routes&views生成されます。しかし、最後の2行は興味深いので、次のようにします。 error false [not found] error false [not found] 明らかに、railsは--option-name false構文が好きではないようです。間違った構文を使用したため、このエラーは発生しますか?はいの場合、正しい方法は何ですか?ありがとう

1
range()がPython 3.3のジェネレーターである場合、範囲でnext()を呼び出せないのはなぜですか?
ウェブ上の誤った情報の犠牲になっているかもしれませんが、何かを誤解している可能性が高いと思います。私がこれまでに学んだことに基づいて、range()はジェネレーターであり、ジェネレーターはイテレーターとして使用できます。ただし、このコード: myrange = range(10) print(next(myrange)) 私にこのエラーを与えます: TypeError: 'range' object is not an iterator ここで何が欠けていますか?これが0を出力し、の次の値に進むことを期待していましたmyrange。私はPythonを初めて使用するので、かなり基本的な質問についてお詫びしますが、他の場所で適切な説明を見つけることができませんでした。

9
Pythonジェネレーターを使用するのに適した時期ではないのはいつですか?
これは、Pythonジェネレーター関数を何に使用できるかという逆です。:Pythonジェネレーター、ジェネレーター式、およびitertoolsモジュールは、最近のpythonの私のお気に入りの機能の一部です。これらは、大量のデータに対して実行する一連の操作を設定するときに特に役立ちます。DSVファイルを処理するときによく使用します。 それで、それはいつですか 、ジェネレーター、ジェネレーター式、またはitertools関数を使用するのが適切ないのですか? ときに私が好むはずですzip()以上itertools.izip()、または range()以上xrange()、または [x for x in foo] 以上 (x for x in foo)? 明らかに、最終的にはジェネレーターを実際のデータに「解決」する必要があります。通常は、リストを作成するか、ジェネレーター以外のループでリストを反復処理します。長さを知る必要がある場合もあります。これは私が求めているものではありません。 中間データ用に新しいリストをメモリに割り当てないように、ジェネレータを使用します。これは、特に大きなデータセットに適しています。小さなデータセットにも意味がありますか?顕著なメモリ/ CPUのトレードオフはありますか? リスト内包表記のパフォーマンスとmap()およびfilter()の目を見張るような議論に照らして、誰かがこれについてプロファイリングを行った場合は特に興味があります。(代替リンク)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.