파이썬 초보. list insert 관련 질문. IndexError: list assignment index out of range

조회수 1091회
a=[1,2,3,4,5]

#a라는 리스트의 각 요소에 3배를 한 리스트b를 출력하라
#Sol(Use for sentence)

'''
b=[]
i=0
for v in a:
        b.insert(i,3*v)
        i=i+1
print(b)
'''

b=[]
i=0
for v in a:
        b[i]=3*v
        i=i+1
print(b)

여기에서 첨에 밑에 코드로 b를 출력하려 했는데

Traceback (most recent call last):
  File "C:/Users/whdud/PycharmProjects/tw100/basic/__init__.py", line 19, in <module>
    b[i]=3*v  

IndexError: list assignment index out of range

라고 오류가 뜨면서 안되길래

어느 요소에서 오류가뜬건지 이리저리 고쳐보다가 리스트에 요소삽입 insert함수가 생각나서 위에 '''로 주석화시킨 함수 대로 바꿔서 실행하니 잘 되었는데 왜 바로 공백리스트인 b에다가 요소를 추가하면 오류가뜨는 걸까요??

제 생각에는

'애초에 b라는 리스트를 공백으로 정의하였기때문에 각각의 요소들이 없는(정의되지않은) 상태라서 요소에 값을 바꾸는게 불가능해서 오류가 났다'. 인거 같은데 올바른 이유인가요? 그러면 insert함수는 요소들이 있든 없든 그자리에 요소를 추가해줄수 있는 함수인건가요?

코딩 처음 시작하는데 책으로 독학하다가 궁금한게 생겨서 이렇게 질문해봅니다.

  • 대원님 가시성을 향상시켜준 편집 감사드립니다! 조영진 2021.6.27 14:51

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    질문해도 될까요?

    네.


    제 생각에는 '애초에 b라는 리스트를 공백으로 정의하였기때문에 각각의 요소들이 없는(정의되지않은) 상태라서 요소에 값을 바꾸는게 불가능해서 오류가 났다'. 인거 같은데 올바른 이유인가요?

    네. 정확히는 b[0]이 없어서 그걸 뭔가로(b*v 등) 바꿀 수 없는 문제입니다.


    그러면 insert함수는 요소들이 있든 없든 그자리에 요소를 추가해줄수 있는 함수인건가요?

    그건 저도 잘 모르겠는데 이참에 list.insert() 메소드 자체를 조사해 봅시다.

    주어진 위치에 항목을 삽입합니다. 첫 번째 인자는 삽입되는 요소가 갖게 될 인덱스입니다. 그래서 a.insert(0, x)는 리스트의 처음에 삽입하고, a.insert(len(a), x)a.append(x)와 동등합니다.

    '갖게 될'이라고 하는 걸 보면 '요소들이 있든 없든' 처리 가능한 모양이네요.

    • 와... 다시 생각해보고 공부해보니 개멍청한 질문이였네요.... 답변 정말 감사드립니다! 열심히 하겠습니다 조영진 2021.6.27 14:50

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

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

(ಠ_ಠ)
(ಠ‿ಠ)