11

変更可能なシーケンスに対するイテレータがあります。

foo = [1, 2, 3, 4, 5]
for bar in foo:

イテレータに含まれる参照を使用して foo の要素に書き込む方法はありますか? 単純な割り当て:

   bar = 42

もちろん機能しません。イテレータにあるシーケンス要素への「カーテンの後ろ」参照を使用することは可能ですか?

PS: インデックスを使用した簡単なソリューション

for i in range(len(a)):
   a[i] = 42

コンテナ名を公開できないため、私の場合は機能しません。

4

3 に答える 3

5

リスト内包表記を使用できます:

foo[:] = [expression for bar in foo]

または、代入が式に対して複雑すぎる場合は、関数を使用できますfunc

foo[:] = [func(bar) for bar in foo]

イテレータしかない場合は、基礎となるコンテナーが存在するという保証さえないため、基礎となるコンテナーに値を再割り当てする方法はありません。

def generator():
    for i in range(10):
        yield i

for bar in generator():
    # Nothing you put here can change what's going on in generator
于 2013-10-24T09:44:45.880 に答える