Python의 list를 다룰 때 특히 list의 특정 항목을 다른 항목으로 치환하고자 할 때 사용하는 slice에서 자칫 잘못하면

원래의 list 항목을 날려 먹거나 원치 않는 value가 끼워넣어지는 문제가 발생한다.

그래서 list의 length가 원치 않게 변해 버리는 문제가 발생한다.

아래 코드가 전형적으로 이런 문제를 유발하는 예제이다.


#-*- coding: utf-8 -*-

a = []

b = [101, 102, 103, 104, 105]

for i in range(10):

   a.insert(i, i)


print("원본", a)

print('길이', len(a))


#아래 코드는 index 2~4까지를 바꾼다. 총3개를 바꾼다.

#그런데 list b에 있는 값은 5개이다. 따라서 b의 앞 3개는

#치환이 되지만 나머지 2개(104, 105)는 끼워넣기가 되어 버린다.

#따라서 list a가 원래 10개였는데 아래 코드 실행 후 len()은 12개가 된다

#a[2:5] = b[0:] 

#print(a)

#print("길이", len(a)) #12가 나온다


#아래 코드는 index 1~7까지 총 7개를 바꾸는데 바꿀 내용인 

#list b에는 값이 5개 뿐이다(101 ~ 105). 이럴 경우 발생하는 현상은

#list a의 index 1~5까지는 101~105로 각각 치환이 되고 

#list a에서 나머지 index 6~7에 해당하는 값은 사라져 버린다.

#그래서 아래 코드 실행후 list a의 len()은 8이 되어져 버린다.

#a[1:8] = b[0:] #이 코드를 실행하고자 하면 위 a[2:5] = b[0:]를 주석 처리 할 것

#print(a)

#print("길이", len(a)) #8이 나온다.


#이러한 문제를 해결하기 위해서는 다음과 같이 처리해 주어야 안전하다.

a[1:len(b)+1] = b[0:]

print(a)

print("길이", len(a))




+ Recent posts