2

私は2つのジェネレーターを持っており、次のメソッドとwhileループを使用して、以下のように処理します。

コード

while end_of_loop = 'n':
    try:
        table1_row = next(table1_generator)
        table2_row = next(table2_generator)
    except StopIteration:
        end_of_loop = 'y'

行がない反復子オブジェクトを特定するにはどうすればよいですか?

2 つのテーブルを比較しようとしていますが、各テーブルの行はジェネレーター オブジェクトにあります。

def _compare(self):
        end_of_table = 'N'

        try:
            while end_of_table =='N':
                try:
                    if self.table1_key == self.table2_key:
                        print 'same key'
                        self.table1_row = next(self.table1_generator)
                        self._convert_table1_key_fields()
                        self.table2_row = next(self.table2_generator)
                        self._convert_table2_key_fields()
                    elif self.table1_key > self.table2_key:
                        self.table2_row = next(self.table1_generator)
                        self._convert_table2_key_fields()
                    elif self.table1_key < self.table2_key:
                        self.table1_row = next(self.table2_generator)
                        self._convert_table1_key_fields()
                except StopIteration as e:
                    print e.args
                    print 'IterError'
                    end_of_table = 'y'

        except StopIteration:
            print 'Next Iteration'
4

3 に答える 3

2

コンテキストや実際にやろうとしていることについての詳細は提供しませんでしたが、itertools.izip_longestがあなたの場合に役立つかもしれません(そしてよりpythonic)。Nonesまたは適切な別の値を入力できます。

于 2013-04-02T20:09:11.517 に答える
1

これのユースケースは思いつきませんが (共有しますか?)、next自分の関数にラップしてみます:

def mynext(it):
    try:
        return next(it)
    except StopIteration:
        raise StopIteration(it)

そして、例えば、

a = iter([1,2,3,4,5])
b = iter([4,5,6,7])

try:
    while True:
        print mynext(a)
        print mynext(b)
except StopIteration as e:
    if e.args[0] == a: print 'a ended' 
    if e.args[0] == b: print 'b ended' 
于 2013-04-02T20:19:09.183 に答える