2011-11-12 3 views
-3

for 루프에서 a를 [4,5,6]으로 변경하고 싶습니다. 이 코드는 바로 인쇄 : 1, 2, 3파이썬 : 루프가 실행되는 동안 루프의 매개 변수 변경

a = [1,2,3] 

for i in a: 
    global a 
    a = [4,5,6] 
    print i 

은 내가 OUPUT 1, 4, 5, 6를 원한다.

+5

(장난감 문제가 아닌) 실제 사용 사례는 무엇입니까? –

+1

새로운 편집으로 이전보다 훨씬 의미가 없습니다. –

+0

'a'는 웹 사이트의 링크입니다. 이 프로그램은이 웹 사이트로 이동합니다. 그런 다음 새로운 링크를 설정합니다 (4, 5, 6). 어떤 조건이 참이면 링크의 on이 선택되고 다시 시작됩니다. (어쩌면 당신은 위키 백과에서 '철학에 뛰어 드는'것을 알 것입니다.) 'a'는 전체 시간을 바꿉니다. – kame

답변

3

원하는 출력 1, 4를 도출하는 방법의 아무런 설명이 없기 때문에 당신은 질문을 명확히해야합니다, (5)와 같이 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 루프의 매개 변수를 수정할 수 없다는 것입니다. 파이썬 문서에서 :

순서가 (이 그러한 목록으로, 가변 시퀀스 유형에 일어날 수) 루프 에 걸쳐 반복되고 수정 안전하지 않습니다. 반복되는 목록을 수정해야하는 경우 (예 : 선택된 항목 복제) 복사본을 반복해야합니다.

편집 : URL을 걸려고하는 의견을 기반으로하는 경우 한 목록 (최상위 링크)을 다른 URL로 바꾸는 것보다 깊이 우선 또는 너비 우선 보행을 수행하는 더 복잡한 논리가 필요합니다. 목록 (첫 번째 페이지의 링크). 귀하의 예에서는 1 페이지로 이동 한 후 2 페이지와 3 페이지를 완전히 잃어 버렸습니다.

+0

리스트 변수'a'를 리셋 할 때'i = 0'을 리셋하려고 할 것입니다. 그렇지 않으면 +1이 OP의 실제 문제를 반영한 ​​것으로 보입니다. 설명에 설명되어 있습니다. –

0

문제는 할당

a = [4,5,6] 

그냥 변수 a가 아닌 기본 객체를 변경하는 것입니다. 이 문제를 처리 할 수있는 다양한 방법이 있습니다. 하나는

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를 시작하십시오.

관련 문제