2011-11-12 37 views
-3

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をしたいです。

+5

(このおもちゃの問題ではなく)実際のユースケースは何ですか? –

+1

新しい編集では、以前よりも意味をなさない... –

+0

'a'はウェブサイト上のリンクです。プログラマーはこのウェブサイトに行く。次に、新しいリンクを設定します(4,5,6)。条件が真であれば、リンクのオンが選択され、再び開始されます。 (たぶんあなたはウィキペディアで「哲学に乗っている」ことを知っているでしょう)。 'a'は全体の時間を変更します。 – kame

答えて

3

のような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ページ目を完全に追跡できなくなります。

+0

リスト変数 'a'をリセットするときに' i = 0'をリセットしたいでしょう。さもなければ、これはコメントに記述されているOPの実際の問題を反映しているようだから+1。 –

0

問題が割り当て

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 
+0

編集をご覧ください。 – kame

0

コード内の有用なポイントで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の新しい値で新しいループを開始します。

関連する問題