Logo

[파이썬] 복잡한 리스트 보기 좋게 출력하기

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

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

하지만 리스트가 많은 양의 데이터를 담고 있거나 리스트의 구조가 복잡할 경우에는 이런 식으로 출력하면 상당히 보기가 어려워지죠?

>>> rows = [[r * 10 + c for c in range(10)] for r in range(10)]
>>> print(rows)
[[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 rows:
...     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 모듈

파이썬에서는 print() 함수의 업그레이드 버전인 pprint() 함수를 제공하고 있는데요. 이 함수를 사용하면 좀 더 예쁘게 복잡한 데이터를 출력할 수 있습니다.

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

>>> from pprint import pprint

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

>>> pprint(rows)
[[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(*rows, 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() 함수에는 가변 길이의 인자를 넘길 수 있는데요. 기본적으로는 공백을 구분자로 사용합니다.

>>> 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

마치면서

이상으로 복잡한 리스트를 보기 좋게 출력하는 여러 가지 방법에 대해서 알아보았습니다. 간단한 디버깅하실 때 유용하게 사용하시길 바라겠습니다. 😄