내 대답은 paxdiablo 's에서 확장됩니다. 내가 잘못 읽은 L2 사례에 대한 OP의 의도를 명확히 해준 덕분에
이 시점에서 나는 기본 언어 기능을 마스터하는 것이 가치 있다고 말하고 싶습니다. 코드에서
, 당신은이 작업을 수행 : 당신이 L1
에 코드의 덩어리를 실행하면
L1 = [0, 0, 0, 0, 0, 1, 2]
k = 0
for i in L1:
while i == 0:
k = k + 1
, 그것은 영원히 반복합니다. 이유는 다음과 같습니다.
for
은 들여 쓰기로 따로 설정된 코드 (아래 코드를 의미)가 반복되도록합니다. 따라서 루프의 for i in L1:
루프는 L1의 각 항목에 대해 한 번 들여 쓰기를 실행합니다.
그러나 while
은 비슷한 기능을 수행합니다. while
은 while
구문의 조건이 False
이 될 때까지 파이썬이 그 아래에 들여 쓰기 된 코드를 반복해서 실행하도록합니다.
따라서 L1
의 경우 처음으로 for
루프를 통해 i
이 0으로 설정됩니다.그런 다음 while i == 0:
은 이 더 이상 0이 아닐 때까지 k = k + 1
으로 묶인 코드를 반복해서 실행한다고 말합니다. 불행하게도 while
루프의 코드는 i
의 값을 변경하지 않으므로 i
은 끝날 때까지 0이되므로 영원히 실행되어 k
에 하나를 반복하여 추가합니다.
찾고있는 것은 루프가되지 않는 if
문입니다. 테스트가 사실인지 여부에 따라 동봉 된 코드를 실행할지 여부를 결정합니다. 그래서, 대신 :
while i == 0:
k = k + 1
당신이 for
루프를 통해, 그리고 각각의 시간을
if i == 0:
k = k + 1
else:
break
를 사용할 수있는 코드는 i
이 0 만약 그렇다면, 한 번만, 그것은 추가 여부를 묻습니다 1에서 k
으로 이동 한 후 다음 목록 요소로 이동합니다. 귀하의 L2 사건을 커버하기 위해 숫자가 0이 아닌 숫자를 치면 break
은 for
루프를 종료하고 계산을 중단합니다.
itertools
으로 표시된 대답은 영리하고 유용하며 알아두면 좋을 것입니다. 매우 큰 목록에는 무엇을 사용하고 싶은지 모르겠지만 언어를 배우는 것 같아서 (아마도 모국어를 배우고있는 것 같습니다.), for
, while
및 if
을 올바르게 사용하는 방법을 배우는 것이 좋습니다.
while 루프는 'i'가 0이 아닌 경우에만 종료됩니다. while 루프의 첫 번째 반복 중에 어떤 현상이 발생했는지 확인할 수 있습니까? 두 번째 반복은 어떻습니까? 아마도 while 루프보다는 if 문을 사용하는 것이 좋습니다. – beetea