Python 2차원 리스트 인덱싱과 중첩 반복 출력 문제 풀이(Claude)

2026. 7. 11. 15:39파이썬

📌 문제

다음은 파이썬으로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

lol = [[1,2,3],[4,5],[6,7,8,9]]
print(lol[0])
print(lol[2][1])
for sub in lol :
    for item in sub :
        print(item, end = " ")
    print()

단계별 실행

1행 — lol

lol = [[1,2,3], [4,5], [6,7,8,9]]

리스트 안에 리스트가 3개 들어있는 2차원 리스트입니다.

lol[0] = [1, 2, 3]
lol[1] = [4, 5]
lol[2] = [6, 7, 8, 9]

2행 — print(lol[0])

lol[0] = [1, 2, 3]

출력:

[1, 2, 3]

3행 — print(lol[2][1])

lol[2] = [6, 7, 8, 9]
lol[2][1] = 7   # 인덱스 1번 = 두 번째 원소

출력:

7

4~7행 — 중첩 반복문

  • 바깥 for sub in lol: lol의 각 하위 리스트를 순회
  • 안쪽 for item in sub: 그 하위 리스트 안의 숫자를 하나씩 순회하며 end=" "로 공백만 붙여서 출력
  • 안쪽 반복이 끝날 때마다(즉 하위 리스트 하나를 다 돌면) print()로 줄바꿈

sub 안쪽 출력 (item, end=" ") 이후 print()

[1,2,3] 1 2 3 줄바꿈
[4,5] 4 5 줄바꿈
[6,7,8,9] 6 7 8 9 줄바꿈

✅ 최종 실행 결과

[1, 2, 3]
7
1 2 3 
4 5 
6 7 8 9 

(각 줄 끝에 공백이 하나씩 더 있습니다: end=" " 때문)


⚠️ 함정 포인트

  1. lol[2][1]은 이중 인덱싱 — 먼저 lol[2]로 세 번째(인덱스 2번) 하위 리스트를 고르고, 그 안에서 다시 [1]로 두 번째 원소를 고릅니다.
  2. end=" "는 줄바꿈이 아니라 공백입니다 — 숫자들이 같은 줄에 이어지는 이유입니다.
  3. 바깥 print()(빈 괄호)의 위치가 중요 — 안쪽 for문 밖, 바깥 for문 안에 있어서 하위 리스트 하나가 끝날 때마다 줄이 바뀝니다. 만약 이 줄이 안쪽 for문 안으로 들어갔다면 숫자마다 줄이 바뀌었을 것입니다.
  4. print(lol[0])은 리스트 형태 그대로 출력 — [1, 2, 3]처럼 대괄호와 쉼표가 그대로 보입니다. 반면 반복문 안의 print(item, ...)은 숫자 하나씩 출력하므로 대괄호가 없습니다.

🎯 핵심 개념 정리

2차원 리스트의 이중 인덱싱

a = [[1,2],[3,4,5]]
a[1]       # [3, 4, 5]  (바깥 인덱스: 몇 번째 하위 리스트)
a[1][2]    # 5          (안쪽 인덱스: 그 안의 몇 번째 원소)

end 옵션으로 출력 이어붙이기

print("A", end=" ")
print("B", end=" ")
print("C")
# 결과: A B C

빈 print()의 역할

인자 없이 print()만 호출하면 줄바꿈만 실행됩니다.

print("Hello", end="")
print()
print("World")
# 결과:
# Hello
# World

중첩 반복문에서 들여쓰기 위치의 의미

for sub in lol:
    for item in sub:
        print(item, end=" ")   # 숫자 하나마다 실행
    print()                     # sub(하위 리스트) 하나가 끝날 때마다 실행

✍️ 시험 답안용 한 줄 풀이

lol[0]은 첫 번째 하위 리스트인 [1, 2, 3]을 그대로 출력하고, lol[2][1]은 세 번째 하위 리스트 [6,7,8,9]의 두 번째 원소인 7을 출력한다. 이어지는 중첩 반복문은 각 하위 리스트의 숫자를 공백으로 구분해 한 줄에 출력하고, 하위 리스트가 끝날 때마다 줄을 바꾸므로 최종 결과는 [1, 2, 3], 7, 1 2 3 , 4 5 , 6 7 8 9 가 순서대로 출력된다.


🧠 미니 퀴즈

  1. lol[1][0]의 값은 무엇일까요?
  2. 안쪽 print(item, end=" ")에서 print()를 안쪽 for문 안으로 옮기면(들여쓰기 변경) 결과는 어떻게 달라질까요?
  3. lol에 [10]을 네 번째 하위 리스트로 추가하면 마지막 줄 출력은 어떻게 될까요?

정답

  1. 4 — lol[1]은 [4, 5]이고 그 중 인덱스 0번은 4
  2. 숫자 하나를 출력할 때마다 줄이 바뀌므로, 모든 숫자가 각각 한 줄씩(1, 2, 3, 4, 5, 6, 7, 8, 9) 세로로 출력됩니다.
  3. 새 줄이 하나 더 생기고, 그 줄은 10 (숫자 10 뒤에 공백 하나)이 출력됩니다.