리스트 문제 질문입니다. if list[j]==list[j+1]: IndexError: list index out of range

조회수 2479회

‘런’은 같은 값이 반복되는 하나의 시퀀스이다. 다음 리스트에서 가장 긴 런을 계산하는 프로그램을 작성하라. 예를 들어, 다음 원소가 있는 리스트에서 가장 긴 런의 길이는 4이다.

[1,2,5,5,3,1,2,4,3,2,2,2,2,3,6,5,5,6,3,1]

문제에서
if list[j]==list[j+1]: IndexError: list index out of range 오류가 나는데 어느 부분을 수정해야 되나요? 파이썬 초보라 잘 모릅니다.

run=[1,2,5,5,3,1,2,4,3,2,2,2,2,3,6,5,5,6,3,1] 
list =[]
for i in run:
  a=1
  list.append(a)
  for j in list:
    if list[j]==list[j+1]:
      len(list)
    else:
      list.clear()
  print(a)

이미지

  • 첫번째 for문에서 왜 i가 아니라 ii예요? 증감연산자같은거예요? 아니면 구분하기위해서나요? noah0508 2021.3.15 09:41
  • ↑ 질문 수정을 해주신 다른 분이 이미지 받아적다가 오타 내신 거 같아요~~ 엽토군 2021.3.15 13:58

1 답변

  • 예를 들어서 list 길이가 8이라면 (즉, 숫자가 8개만 있다면)

    마지막 8번째 숫자에 대해서 검사를 할 때 if list[7] == list[7 + 1]이 실행되는데요

    잘 생각해 보시면 list[8]은 존재하지 않는 숫자입니다. (아홉번째 숫자란 뜻이거든요.)

    다들 한번쯤은 내보는 오류입니다.

    list[j + 1]이 존재하면서 그 값이 다른 뭔가와 같은지 그렇게 검사하시면 됩니다.


    + 기왕이면 numbers = [] 같은 작명을 해봅시다.

    • 두번째 문제에 대해서 좀 덧붙이면 list 가 리스트 타입의 예약어이기 때문에, list 를 (특히 글로벌) 변수명으로 해버리면, 이후에 list 로 타입캐스팅을 한다던가 하는 부분에서 에러가 발생할 수 있어요. 이런 걸 shadowing 이라고 해서, mypy 같은 파이썬 코드분석도구를 사용하면 경고를 띄워주고 합니다. nowp 2021.3.15 13:55

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)