1

イテレータから 、 などsetを作成したい。list残念ながら、それらのコンストラクターにはイテレーターではなくイテラブルが必要です。すぐに破棄されるイテラブルを作成したくありません。

もちろん、単純にリストまたは集合内包表記を使用することもできます。これにより、私がやりたいこと (およびそれ以上) を正確に行うことができます。ただし、それらの構文は独特です。だから私が関数を書こうとしたとき:

def create_from_gen(container_type, generator):
  return container_type(generator)

私は立ち往生しました。ユーザー定義のコンテナーの場合、もちろん独自のコンストラクターを定義できます。ライブラリと組み込み型の場合、選択の余地がありません。listandをチェックしてset、私が推測する特別な構文を使用できますが、それは見苦しいです。

4

2 に答える 2

4

イテレータも反復可能なオブジェクトです。常に__iter__自分自身を返すメソッドが必要です。これは、Pythonのイテレータの仕様の一部です。

したがって、イテレータをlistまたはsetコンストラクタに渡すだけで、正常に機能するはずです。

于 2012-12-15T02:45:47.620 に答える
3

すべてのイテレータは反復可能です。「イテレータ」の定義は、イテレータをそこから作成できることです。

>>> list(iter((1, 2, 3)))
[1, 2, 3]
于 2012-12-15T02:45:57.900 に答える