it공부 (개념)/python

반복문을 사용하여 List를 수정할때에는 새로운 List를 만들자.

cantor 2022. 12. 29. 14:29

반복문을 사용하여 list의 element를 수정하고자 할때에

list에저장된 값에 변화가생긴다면 의도와는 다른 결과가 종종 나오곤 한다.

 

 

 

list의 i번째 값이 0 이라면 그 다음값은 1로 바꾸는 코드를 짜보자.

 

[0,0,0] ->[0,1,1]

이것을 아무생각없이 for loop로 구현해보면

 

olist = [0, 0, 0]

for i in range(len(olist) - 1):
    if olist[i] == 0:
        olist[i+1] = 1

print(olist)

결과값 [0, 1, 0] 을 얻을 수있다.

중간에 olist[1]의 값이 1로바뀌었기때문에, olist[2]의 값이 변하지 않게 되는것이다.

 

 

 

그래서 리스트를 직접 수정한다기보단 새로운 리스트를 만들고, 기존 리스트에 덧씌우는것을 추천한다.

 

 

  • 1. list comprehension

olist = [0, 0, 0]


  new_list = [0] + [1 if olist[i] == 0 else olist[i+1] for i in range(1, len(olist))]
  
  • 2. for loop 
 

new2_list = [olist[0]]
for i in range(1, len(olist)):
    if olist[i] == 0:
        new2_list.append(1)
    else:
        new2_list.append(olist[i])