2017-11-20 9 views
0

편집 : '안녕하세요' '목록'IndexError 인덱스 변수는 범위에 있어야한다하더라도

에 업데이트 내가 초보자이고 내가 라틴어 돼지로 영어 문장을 번역하는 프로젝트에 노력하고있다,하지만 난이 문장에서 구두점 앞에 공백을 제거하는 동안 문제가 발생합니다. 다음은 내가 문제가되는 스크립트입니다. 내가 그것을 실행하면

import string 

list = ['H', 'i', 's', 't', 'a', 'y', ' ', 's', 'i', 'a', 'y', ' ', 'a', 'a', 'y', ' ', 'e', 's', 't', 't', 'a', 'y', ' ', '.', ' ', 'H', 'i', 's', 't', 'a', 'y', ' ', 's', 'i', 'a', 'y', ' ', 'a', 'a', 'y', ' ', 'e', 's', 't', 't', 'a', 'y'] 

h = 0 

for h in range(len(list)): 
    if list[h] in string.whitespace: 
     if list[h + 1] in string.punctuation: 
      list.pop(h) 
      h = h + 1 
     else: 
      h = h + 1 
    else: 
     h = h + 1 

print(list) 

나는 오류를 얻을 :

내가 루프의 외부 안녕하세요 [H]를 인쇄 할 때이 ' 시간'

하나를 색인에 아무 문제가 없습니다

File " ... ", line 110, in <module> 
    if list[h] in string.whitespace: 
IndexError: list index out of range 

내가 실수 한 부분이나 내가 바꿀 수있는 부분에 대한 아이디어?

전체 파일을 확인하는 것이 좋을 경우 알려주십시오.

답변

1

여기에는 두 개의 목록 (hilist)이 있습니다. 여기에서 hi은 아마도 Pig Latin으로 변환하려고 시도하는 문자열입니다. 예를 들어, for h in range(len(hi))을하지만 코드에서, 당신은 인덱스 listh을 사용하고 있습니다 : 루프 지수는 hi의 길이를 겪고

if list[h] in string.whitespace. 오류에서 입력 문자열 hilist보다 길어서 list 길이를 초과하는 h 값을 발견하면이 오류가 발생합니다.

나는 코드 전체에서 hi을 참조하려고 한 것 같지만 문제가 명확하지 않을 수 있습니다. 따라서 list의 모든 인스턴스를 hi으로 바꿉니다. 코드 list.pop(h)에서

목록의 크기를 감소 목록에서 요소를 제거합니다

업데이트 된

업데이트 된 질문을 반영합니다. 따라서 처음에 for h in range(len(list))의 시간에 20 개의 요소가있는 경우에도 루프는 여전히 인덱스 = 19까지 실행되지만 목록의 길이가 점점 짧아 지므로 어떤 시점에서는 더 이상 20 개의 요소가 없습니다.

이러한 상황에서 일반적인 전략은 목록을 거꾸로 탐색하는 것입니다. 대답 here을보십시오.

+0

네, 감사합니다. 내 원본 파일에서 'hi'는 내가 사용하고 있던 목록의 이름 이었지만 예제로 목록을 변경했습니다. 나는 나의 설명을 갱신 할 것이다. 그러나 여전히 동일한 오류가 발생합니다. 나는 h 값이리스트 '리스트'의 길이보다 더 큰 이유를 찾지 못한다. –

+0

또한 목록에서 요소를 팝핑하기 때문에'list'의 크기가 줄어 듭니다. 그래서 초기에 20 엘리먼트 길이 였다면, 루프는 인덱스 = 19까지 계속 실행되지만'list'는 점점 짧아지고 있습니다. 그래서 어떤 시점에서는 더 이상 20 엘리먼트가 없습니다. – Antimony

+0

오, 고마워. 나는 그 문제를 해결할 것이다. –