파이썬 for문과 del 키워드 관련 질문입니다

파이썬 for문과 del 키워드 관련 질문입니다

작성일 2022.09.18댓글 3건
    게시물 수정 , 삭제는 로그인 필요

a = ['Olivia', 'a', 'b', 'c', 'Evelyn']
b = [0, 4]

for i in b:
   del a[i]

를 실행했을 때
왜 자꾸 i가 a 리스트의 인덱스에 해당되지 않는다고 뜨는거죠????ㅠㅠㅠ
정확한 오류메시지는 [IndexError: list assignment index out of range] 라고 뜹니다
이걸 어떻게 해결해야 할까요



profile_image 익명 작성일 -

0번째와 4번째 인덱스를 제거하려고 하겠네요

처음엔 a의 'Olivia'가 제거될거고

a에 ['a', 'b', 'c', 'Evelyn'] 이 남게될겁니다.

그 상태에서 4번째 인덱스를 제거하려고 접근하면 지금 겪고계신 IndexError를 맞이하겠네요.

만약 'Evelyn'을 제거하고싶었다면

b = [0, 3]

처음에 b를 [0, 3]으로 초기화하거나

del_count = 0 for i in b: j = i - del_count if j < 0: break del[i - del_count] del_count += 1

이렇게 인덱스를 하나씩 보정해주는 방법을 생각할 수 있겠네요.

원래는 어떻게 작성하고싶었던걸까요?

profile_image 익명 작성일 -

답변입니다.

우선 b=[0, 3]으로 바꿨습니다.

※ (기존) b = [0, 4] ====> (변경) b = [0, 3]

그 후에 아래와 같이 해보면

i 값, 그리고 a 리스트 값을 알 수 있습니다.

보시면 for문을 한번 돌고

a 리스트 갯수가 3개로 줄었습니다.

그런데 처음엔 b = [0, 4] 이므로

두번째 for문에서 i에 4가 들어가는데

a리스트는 3개 뿐이니까 오류가 발생한겁니다.

a = ['Olivia', 'a', 'b', 'c', 'Evelyn'] b = [0, 3] for i in b: del a[i] print(i) print(a) ====================================== 출력결과 ====================================== 0 ['a', 'b', 'c', 'Evelyn'] 3 ['a', 'b', 'c']

profile_image 익명 작성일 -

다음과 같이 print를 해보면

처음 0 index는 del이 되었고,

두번째 4 index 할때 에러가 발생한 것으로 확인 할 수 있습니다.

그리고, len(a)를 보면 원래 5개 였으나 del을 한번 하면 4로 줄죠. 그런데 b의 두번째가 4 이기때문에

a에는 없는 index가 된 것입니다.(index는 0부터 시작하니 len-1이 마지막 index 값이 되죠)

a = ['Olivia', 'a', 'b', 'c', 'Evelyn'] b = [0, 4] for i in b: print(i, len(a)) del a[i]

여러가지 방법이 있겠지만 위 코드상에서는 다음과 같이 삭제할 index를 가지고 있는

b 를 내림차순으로 정렬해서 하면 될 것 같습니다.

그럼 큰 index 값들이 먼저 del 처리되기 때문에 len하고는 상관없게 됩니다.

a = ['Olivia', 'a', 'b', 'c', 'Evelyn'] b = [0, 4] b.sort(reverse=True) # 내림차순 정렬 for i in b: print(i, len(a)) del a[i] print(a)

파이썬 코드 관련 질문

파이썬 독학하고 있는 사람입니다. for문과 i,j 변수로 숫자 출력 연습하다 궁금한게 생겨 질문 올립니다. 1 2 3 4 5 6 7 8 9 이런식의 세모형태 연속 숫자 출력이나 1 2 3 4 5 6 7 8...

파이썬 질문

파이썬에서 : 가 뭔뜻인가요 파이썬에서 콜론(:)은 여러... 조건문과 반복문: if, elif, else, for, while 등의 문장이... class 키워드 뒤에 콜론을 사용합니다. 이것은 정의된 함수나...

파이썬 질문입니다

... 물어봐요 파이썬에서 제공하는 날짜관련 함수들은 제외하고 반복문과 윤년 계산 등 만을... [2]=28 for i in range(MM): #전월말 까지 날자계산 KD...