• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

lab8 get_cleaned_english_sentence 질문

19.05.29 20:12 작성 조회수 92

0

get_cleaned_english_sentence 함수 작성 중에 있습니다.

input_list = list(raw_english_sentence)
input_list2 = input_list
for i in input_list:
if i == '.' or i == ',' or i =='!' or i == '?':
input_list.remove(i)

while input_list[0] == ' ':
del input_list[0]

while input_list[-1] == ' ':
del input_list[-1]

result = ''.join(input_list)

return result

이와 같이 코드를 작성했을 경우 특수문자가 붙어있을 때 일부 지워지지 않는 현상을 발견했습니다.

예를 들어 abc.,?! 를 입력했을 때 나오는 결과가 abc,! 인 것입니다.

아마 C에서와 같이 list의 인덱스는 유지되고, Value가 앞으로 당겨지기 때문이라고 생각했습니다.

일단 제가 생각하는게 맞는 것인지 궁금합니다.

 

그리고 이를 해결하기 위해

input_list = list(raw_english_sentence)
input_list2 = input_list
for i in input_list[:]:
if i == '.' or i == ',' or i =='!' or i == '?':
input_list.remove(i)

while input_list[0] == ' ':
del input_list[0]

while input_list[-1] == ' ':
del input_list[-1]

result = ''.join(input_list)

return result

와 같이 for문에 있는 input_list를 input_list[:] 로 고쳤더니 정상적으로 abc가 나오는 것을 확인했습니다.

허나 그 이유를 모르겠습니다. 즉, 문제는 해결했으나 해결된 이유를 모릅니다.

그 이유에 대해 알려주셨으면 합니다.

답변 1

답변을 작성해보세요.

0

While 문 중간에 del을 쓰게 되면 중간중간 값이 지워지면서 while 문이 원하는데로 돌아가지 않습니다. 이점 유의하셔서 다시 작성하면 될거 같습니다.