1

リスト内包表記を介して宣言されたリストで enumerate を呼び出すいくつかのコードを変更しています。

self.groups = [Groups(self, idx) for idx in range(n_groups)]

じゃあ後で:

for idx, group in enumerate(self.groups):
    # do some stuff

しかし、列挙呼び出しを開始パラメーターを介して2番目のリスト要素で開始するように変更すると、たとえば

for idx, group in enumerate(self.groups[1]):

例外があります:

exceptions.TypeError: 'Group' object is not iterable

誰かがこれがなぜなのか説明できますか?

4

3 に答える 3

3

問題: シーケンスで 1 つの引数を指定してインデクサーを使用すると、シーケンスから1 つのオブジェクトが生成されます。シーケンスから選択されたオブジェクトのタイプGroupは であり、そのタイプは反復可能ではありません。

解決策:特定のインデックスからアイテムの新しいシーケンスを取得するには、スライス構造を使用します。

for idx, group in enumerate(self.groups[1:]):
    # do some stuff
于 2010-03-31T11:08:05.683 に答える
1

isliceシーケンスがモジュールからの関数の使用を検討するよりも十分itertoolsに大きい場合は、スライスよりも大きなシーケンスの方がメモリ効率が高いためです。

import itertools

for idx, group in enumerate(itertools.islice(self.groups, 1, None)):
    # process
于 2010-03-31T16:45:04.280 に答える
1

あなたは2番目から始めていません.2番目だけを反復しようとしています. 2 番目の項目から開始するには、次のようにします。

for idx, group in enumerate(self.groups[1:]):
    # process
于 2010-03-31T11:08:36.930 に答える