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
를 원한다.
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
를 원한다.
원하는 출력 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 페이지를 완전히 잃어 버렸습니다.
리스트 변수'a'를 리셋 할 때'i = 0'을 리셋하려고 할 것입니다. 그렇지 않으면 +1이 OP의 실제 문제를 반영한 것으로 보입니다. 설명에 설명되어 있습니다. –
문제는 할당
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
편집을 참조 할 수 있습니까? – 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). 어떤 조건이 참이면 링크의 on이 선택되고 다시 시작됩니다. (어쩌면 당신은 위키 백과에서 '철학에 뛰어 드는'것을 알 것입니다.) 'a'는 전체 시간을 바꿉니다. – kame