forループでaを[4,5,6]に変更したいと思います。 このコードだけ印刷:1、2、3Python:ループ実行中にループのパラメータを変更する
a = [1,2,3]
for i in a:
global a
a = [4,5,6]
print i
私は出力に含ま1, 4, 5, 6
をしたいです。
forループでaを[4,5,6]に変更したいと思います。 このコードだけ印刷:1、2、3Python:ループ実行中にループのパラメータを変更する
a = [1,2,3]
for i in a:
global a
a = [4,5,6]
print i
私は出力に含ま1, 4, 5, 6
をしたいです。
のようなwhileループを使用することです、入力が[1、2、3]のときは6です。以下は、所望の出力を生成しますが、それは完全にアドホックだと意味がありません:
i = 0
a = [1, 2, 3]
while i < len(a):
print(a[i])
if a[i] == 1:
a = [4, 5, 6]
i = 0 # edit - good catch larsmans
else:
i += 1
主なポイントは、ループが実行されているときは、forループのパラメータを変更することができないということです。 Pythonドキュメントから:
ループ (これが唯一のリストなどの変更可能なシーケンス型、のために起こることができる)で反復処理されたシーケンスを変更しても安全ではありません。 反復処理中のリストを変更する必要がある場合(たとえば、選択した項目を複製する場合は )、コピーを反復処理する必要があります。
編集:あなたはURLを歩くしようとしているコメントに基づいている場合、あなただけの別と1つのリスト(トップレベルのリンク)を交換するよりも、深さ優先または幅優先散歩を行うために、より複雑なロジックを必要としますリスト(最初のページのリンク)。あなたの例では、ページ1に潜入した後、2ページ目と3ページ目を完全に追跡できなくなります。
リスト変数 'a'をリセットするときに' i = 0'をリセットしたいでしょう。さもなければ、これはコメントに記述されているOPの実際の問題を反映しているようだから+1。 –
問題が割り当て
a = [4,5,6]
だけの変数a、ない基礎となるオブジェクトを変更することです。あなたはこれに対処することができる様々な方法があります。一つは、あなたが希望する出力1、4、5を導出する方法の何の説明がありませんので、あなたは質問を明確にする必要があります
a = [1,2,3]
i = 0
while i<len(a):
print a[i]
a = [4,5,6]
i += 1
プリント
1
5
6
編集をご覧ください。 – kame
コード内の有用なポイントでid(a)を印刷すると、これが機能しない理由が分かります。
これでも動作しないような何か:
a = [1,2,3]
def change_a(new_val):
a = new_val
for i in a:
change_a([4,5,6])
print i
私はあなたがやりたいことが可能であるとは思いません。現在のループから抜け出し、aの新しい値で新しいループを開始します。
(このおもちゃの問題ではなく)実際のユースケースは何ですか? –
新しい編集では、以前よりも意味をなさない... –
'a'はウェブサイト上のリンクです。プログラマーはこのウェブサイトに行く。次に、新しいリンクを設定します(4,5,6)。条件が真であれば、リンクのオンが選択され、再び開始されます。 (たぶんあなたはウィキペディアで「哲学に乗っている」ことを知っているでしょう)。 'a'は全体の時間を変更します。 – kame