Development/Python

[Python] 리스트 인덱스 중복하는 경우

이대코 2023. 3. 29. 19:05

안녕하세요. Harry입니다.

 

본 포스팅의 목적은, 코딩테스트를 준비함에 있어 스스로 공부한 지식을 정리하고자 합니다.

 

배경 : 2차원 리스트를 생성하는 다양한 방법이 있는데, 방법에 따라 리스트 내 각 요소의 인덱스가 중복되는 경우가 있어 활용 시 혼란스러운 상황 경험.

 

1. 리스트 인덱스가 중복하는 경우

duplication = [[0]] * 5

duplication[0].append(1)
print(duplication)

위와 같이 duplication 이라는 2차원리스트를 생성한 후 인덱스가 0인 내부 리스트에 1을 더한 경우 아래와 같이 출력될 것이라 기대했습니다.

[[0, 1], [0], [0], [0], [0]]

하지만 실제 출력 결과는 아래와 같습니다.

[[0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]

2차원 리스트의 영역을 넓히고자 할 때, 단순히 원하는 양만큼 곱해준다면 인덱스가 중복되는 것으로 인식됩니다.

 

그렇기 때문에 인덱스 중복을 피하기 위해선 아래와 같이 작성해야합니다.

 

2. 리스트 인덱스가 중복하지 않는 경우(반복문 활용)

Non_duplication = [[0] for i in range(5)]

Non_duplication[0].append(1)
print(Non_duplication)

단순 곱이 아닌 반복문을 활용하여 작성해 준다면, 인덱스가 중복하지 않습니다.

[[0, 1], [0], [0], [0], [0]]

3. 리스트 인덱스가 중복하지 않는 경우(단순 곱 + 반복문)

만약 1,2번을 동시에 쓴다면 어떻게 될까요??

Non_duplication = [[0]*5 for i in range(5)]

Non_duplication[0].append(1)
print(Non_duplication)

2번 식에서 [0]*5를 작성하여 추가해보았습니다.

 

[[0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

위와 같이 리스트 인덱스가 중복되지 않는 것으로 확인했습니다.

 

감사합니다.