Python *, Zip, Join
Table of Contents
Python * 연산자
*
연산자는 C
또는 C++
에서는 Pointer
를 나타낼 때 사용하거나 곱하기를 계산할 때 사용하는 경우가 일반적이다.
- 하지만 Python에서는 조금 더 다양한 활용 용도가 있고, 이를 이용하면 Python을 이용하여 알고리즘 문제를 풀 때, 도움이 되는 경우가 있어서 이를 소개하고자 한다.
- 곱셈 및 거듭제곱 연산자로서의 사용
- 일반적으로
*
는 곱셈 연산자, **
는 거듭제곱 연산자로 사용 가능하다.
a = 2 * 3 # 6
a = 2 ** 3 # 2 * 2 * 2 = 8
list comprehension
에 사용할 때
list comprehension
은 list
를 초기화할 때, 한 줄로 for
또는 if
문을 사용하는 방법을 의미하는데, 이와 같은 때 *
를 사용할 수 있다.
lst = [0] * 30 # 30개의 0을 포함한 list 초기화
list
, tuple
, dict
타입을 unpacking할 때
- 알고리즘 문제를 풀다보면, 리스트를 한 줄에 출력해야하는 경우가 있다. 이와 같은 경우에 unpacking하는
*
을 사용하면 쉽게 문제를 해결할 수 있다.
a = [1, 2, 3, 4, 5]
print(a) # [1, 2, 3, 4, 5]
print(*a) # 1 2 3 4 5
a = (1, 2, 3, 4, 5)
print(a) # (1, 2, 3, 4, 5)
print(*a) # 1 2 3 4 5
a = {"hello":"world", "Good":"Bye"}
print(a) # {'hello': 'world', 'Good: 'Bye'}
print(*a) # hello Good
Python zip
zip
함수는 여러 개의 반복 가능한 타입을 입력으로 받았을 때, 이를 묶어서 다시 보내주는 역할을 한다.
- 예를 들어
(1, 2, 3)
과 (10, 20, 30)
을 입력으로 준다면, (1, 10)
, (2, 20)
, (3, 30)
이 반환되는 형식이다.
- 특징으로는 반환되는 값이
zip
형식으로 나온다는 점이며, 이를 list
로 변경해주면 쉽게 사용이 가능하다.
- 2차원 이상의
list
에서는 zip
을 사용하게 되면 2차원 배열을 Transpose
시킬 수 있다. 이는 엄청난 장점이다.
- 옵션으로는
strict
옵션을 줄 수 있는데, 이를 True
로 준다면, 입력되는 반복 가능한 타입의 길이가 다르면 오류가 발생한다.
strict
옵션이 False
인 경우, 길이가 다르면, 짧은 것에 맞추어서 종료된다.
lst = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print(lst) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(list(zip(*lst))) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
A = ['a', 'b', 'c', 'd']
B = [1, 2, 3]
print(list(zip(A, B))) # [('a', 1), ('b', 2), ('c', 3)]
print(list(zip(A, B, strict=True))) # error
Python join
join
은 String
에 포함된 메서드이며, 이는 입력으로 반복 가능한 타입을 입력으로 받는다.
- 입력되는 반복 가능한 타입의 경우
String
타입이어야 하며, 아닐 경우 오류가 발생한다.
- 출력은 입력으로 들어온 반복 가능한
String
타입 사이에 기존 String
이 포함되는 형태로 동작한다.
- Python에서는 간혹 특정
String
타입의 특정 부분을 변경하라는 문제가 나오는 경우가 있는데, String
타입의 특징 상, 중간에 있는 특정 부분의 값을 변경하는 것이 불가능하다. (immutable
)
- 이를 변경하기 위해,
String
을 list
로 타입 변경하고, 원하는 부분을 수정한 후, join
메서드를 적용하여, 다시 문자열로 바꾸는 방식을 사용할 수 있다.
old_string = "Hello World"
old_string[0] = "J" # Error happen
new_string = list(old_string)
new_string[0] = "J"
new_string = ''.join(new_string) # 각 문자를 붙이기
another_string = ' '.join(new_string) # 각 문자 사이에 띄워쓰기 추가
print(old_string) # Hello World
print(new_string) # Jello World
print(another_string) # J e l l o W o r l d
Review
- 이번에는 Python으로 알고리즘 문제를 풀 때, 간혹 유용하게 사용할 수 있는
*
, zip
, join
에 대해 확인해보았다.
- 개인적으로
*
이 가장 유용하게 사용이 되어왔던 것으로 생각된다.
zip
의 경우, 간혹 2차원 배열에서 가로 및 세로에서 특정한 값이 있는 지 확인해야하는 경우가 있는데, 이와 같은 경우에 유용하다.
join
의 경우, 문자열 처리에 가끔 등장하며 split()
과 반대 역할을 하므로, 이도 알아두면 도움이 많이된다.
- 추가적으로 문제를 풀다가, 도움이 될만한 내용이 있으면, 리뷰할 수 있도록 하겠습니다.