Logo

파이썬에서 복잡한 리스트 출력하기

파이썬에서 리스트(list)를 콘솔에 출력할 때 보통 print() 함수를 사용하게 되는데요. 예를 들어, 10개의 숫자를 담고 있는 간단한 리스트는 다음과 같이 출력할 수 있습니다.

>>> nums = list(range(10))
>>> print(nums)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

하지만 리스트가 많은 양의 데이터를 담고 있거나 리스트의 구조가 복잡할 경우에는 이런 식으로 출력하면 상당히 보기가 어려워지죠? 😵‍💫 예를 들어, 파이썬의 꽃이라고 불리우는 표현식(list comprehension) 문법을 사용해서, 100개의 숫자를 10개씩 이차원 리스트로 만들고 출력해보겠습니다.

>>> matrix = [[r * 10 + c for c in range(10)] for r in range(10)]
>>> print(matrix)
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35, 36, 37, 38, 39], [40, 41, 42, 43, 44, 45, 46, 47, 48, 49], [50, 51, 52, 53, 54, 55, 56, 57, 58, 59], [60, 61, 62, 63, 64, 65, 66, 67, 68, 69], [70, 71, 72, 73, 74, 75, 76, 77, 78, 79], [80, 81, 82, 83, 84, 85, 86, 87, 88, 89], [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]

이번 포스팅에서는 위와 같이 복잡한 리스트를 최소한의 노력으로 좀 더 보기 좋게 출력하는 몇 가지 팁을 알려드리려고 합니다.

for 루프

아마 많은 분들이 가장 먼저 떠올리실 방법이 아무래도 루프를 도는 것일 일텐데요. for 문을 사용하여 루프를 돌면서 리스트의 각 원소를 여러 줄에 나누어서 출력할 수 있죠.

>>> for row in matrix:
...     print(row)
...
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69]
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79]
[80, 81, 82, 83, 84, 85, 86, 87, 88, 89]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

어떤가요? 출력 결과가 훨씬 보기 수월해졌죠? 😁

그런데 이 방법은 두 줄의 코드가 필요하고 들여쓰기도 해야하기 때문에 계속 쓰시다보면 은근히 번거롭다고 느껴지실 거에요.

pprint 모듈

루프를 사용하는 대신에 파이썬에 기본 탑제되어 있는 pprint 모듈을 사용할 수도 있어요. 이 모듈을 통해서 print() 함수의 업그레이드 버전인 pprint() 함수를 사용할 수 있습니다.

이 함수를 사용하면 좀 더 예쁘게 복잡한 데이터를 출력할 수 있습니다.

pprint() 함수를 사용하려면 먼저 pprint 모듈을 임포트해야합니다.

>>> from pprint import pprint

이제 pprint 함수를 이용해서 리스트를 출력해보면 위와 유사한 형태로 출력이 되는 것을 볼 수 있습니다.

>>> pprint(matrix)
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
 [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
 [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
 [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
 [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
 [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
 [80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
 [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]

마지막으로 제가 개인적으로 제일 많이 사용하는데 은근히 많이 알려지지 않은 방법을 소개해드릴게요. 바로, 파이썬의 * 기호와 print() 함수의 sep 옵션을 이용하는 것인데요.

>>> print(*matrix, sep="\n")
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69]
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79]
[80, 81, 82, 83, 84, 85, 86, 87, 88, 89]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

짜잔! 🎉 for 루프를 돌리거나 pprint 모듈을 임포트하지 않고도, 한 줄의 코드로 처리할 수 있어서 매우 편리하지 않나요?

간단히 원리를 설명드리면, 우선 리스트 앞에 * 연산자를 붙여서 함수를 호출하면 리스트를 전개, 즉 펼쳐서 마치 여러 개의 인자를 넘긴 효과가 납니다.

print(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5], matrix[6], matrix[7], matrix[8], matrix[9])

그리고 print() 함수에는 여러 개의 인자로 넘기면 기본적으로는 공백으로 구분을 해줍니다.

>>> print(1, 2, 3)
1 2 3

하지만 구분자를 sep 옵션을 통해 다른 문자로 바꿀 수가 있습니다.

>>> print(1, 2, 3, sep=",")
1,2,3
>>> print(1, 2, 3, sep="\n")
1
2
3

print() 함수의 다양한 활용법에 대해서는 별도의 포스팅에서 다루고 있으니 참고 바랍니다.

전체 코드

본 포스팅에서 제가 작성한 전체 코드는 아래에서 직접 확인하고 실행해보실 수 있습니다.

https://dales.link/cln

마치면서

지금까지 파이썬에서 복잡한 리스트를 보기 좋게 출력하는 세 가지 방법에 대해 살펴보았습니다. 이 요령을 잘 습득해두시면 리스트에 저장된 값을 빠르게 디버깅하실 때 특히 유용하실 거에요!