이 글은 Python 으로 처음 코딩 테스트를 진행하는 분들께 유용합니다.
앞선 포스팅에서는 Python으로 입력을 처리하는 방식들에 대해 안내하였다.
이번에는 결과값을 출력시키는 여러 방법에 대해서도 설명을 진행하겠다.
print() 함수를 사용하되, 조금 더 효율적이고 빠른 방식이 존재한다.
백준 1181번 문제인 단어 정렬 문제에서는 List
에 담긴 요소를 출력시켜야 한다.
https://www.acmicpc.net/problem/1181 에서 해당 문제의 전문을 열람할 수 있다.
import sys
read = sys.stdin.readline
N = int(read())
data = sorted(list(set(read.strip() for _ in range(N))))
data.sort(key=lambda x: len(x))
for x in data:
print(x)
일반적으로 우리가 List
내의 요소를 출력시킬 때는 for
문을 통해 요소를 꺼내고
이를 print()
함수로 화면에 출력시키는 과정을 거친다. 하지만 다른 방법이 있다면?
Python 에서는 하나의 변수에 여러 개의 값을 넣을 수 있다. 이를 Packing 이라 한다.
흔히 tuple
자료형을 사용할 경우 이 기법을 많이 채용하는데, 예시 코드는 하단과 같다.
numbers = 1, 2, 3, 4
그리고 이렇게 tuple
로 묶인 값들을 다시 풀어주는 기법을 Unpacking 이라고 한다.
numbers = 1, 2, 3, 4
N, M, K, L = numbers
현재 N, M, K, L
변수에는 튜플에 담긴 1, 2, 3, 4
값이 순서대로 할당되었다.
이를 잘 활용한다면, List
에 담긴 값을 반복문 없이도 쉽게 출력시킬 수 있다.
Asterisk (*) 는 Python 에서 다양한 용도로 사용되는 특수 문자 중 하나다.
곱셉, 리스트 확장의 등의 기능도 있으나, Unpacking 을 진행할 때도 쓰인다.
data = [1, 2, 3, 4, 5]
print(*data)
>>> 1 2 3 4 5
보이는가? for
문 없이도 data
변수가 자동으로 언패킹 되어 화면에 출력되었다.
이렇게 결과를 출력할 경우 불필요한 반복을 하지 않아 실행 속도의 이점을 가진다.
Built-in Functions Documentation 에서 정의한 print 함수의 구조
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
print()
함수의 경우, 키워드 인자가 아니면 해당 값을 전부 String
으로 변환시킨다.
따라서 data
변수를 언패킹한 값을 가변 인자로 받아, 이를 문자열로 변경해 출력해준다.
한 가지 주의할 점은 언패킹의 결과값은 공백을 기준으로 한 줄에 걸쳐 나온다는 것이다.
따라서 이를 여러 줄에 걸쳐 출력시키고 싶다면, print()
함수의 속성을 이용해야 한다.
print() 함수에서 유용하게 사용할 수 있는 옵션들은 sep
와 end
가 있다.
그 외에도 file
이나 flush
같은 옵션이 있긴 하지만, 설명하진 않겠다.
만약 언패킹 된 결과를 여러 줄에 걸쳐 출력하려면 sep
옵션을 사용해야 한다.
data = [1, 2, 3]
print(*data, sep='\n')
>>> 1
2
3
sep
옵션은 print()
함수의 출력문 사이에 다른 값을 넣도록 해주는 기능이다.
기본적으로 sep
옵션은 공백으로 되어있으나, 여기서는 개행문자 \n
를 넣었다.
이렇게 될 경우 자동으로 줄 바꿈이 되어 여러 줄에 걸쳐 값이 화면에 출력된다.
data = [1, 2, 3]
for num in data:
print(num, end=' ')
>>> 1 2 3
end
옵션은 print()
함수가 종료된 이후의 내용을 수정해주는 기능을 한다.
기본적으로 end
옵션은 개행문자 \n
지만, 이를 바꿔 줄바꿈을 방지할 수 있다.
상단의 코드는 공백으로 옵션 값을 변경하여 한 줄에 걸쳐 결과 값을 출력시켰다.
Python의 가변 인자 와 언패킹 기법에 대한 이해가 있다면 더욱 좋다.
다음 포스팅은 아마 유용하게 쓰이는 함수 와 관련된 내용을 작성하지 않을까 싶다.
zip()
, enumerate()
, map()
등 여러 함수에 대한 내용을 추가로 정리해야 겠다.