Python *, Zip, Join

참고 원본 - 파이썬의 Asterisk(*) 이해하기

참고 원본 - Python zip

참고 원본 - Python join

Table of Contents


Python * 연산자

  • * 연산자는 C 또는 C++에서는 Pointer를 나타낼 때 사용하거나 곱하기를 계산할 때 사용하는 경우가 일반적이다.
  • 하지만 Python에서는 조금 더 다양한 활용 용도가 있고, 이를 이용하면 Python을 이용하여 알고리즘 문제를 풀 때, 도움이 되는 경우가 있어서 이를 소개하고자 한다.
  1. 곱셈 및 거듭제곱 연산자로서의 사용
    • 일반적으로 *는 곱셈 연산자, **는 거듭제곱 연산자로 사용 가능하다.
a = 2 * 3 # 6
a = 2 ** 3 # 2 * 2 * 2 = 8
  1. list comprehension에 사용할 때
    • list comprehensionlist를 초기화할 때, 한 줄로 for 또는 if문을 사용하는 방법을 의미하는데, 이와 같은 때 *를 사용할 수 있다.
lst = [0] * 30 # 30개의 0을 포함한 list 초기화
  1. 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

  • joinString에 포함된 메서드이며, 이는 입력으로 반복 가능한 타입을 입력으로 받는다.
  • 입력되는 반복 가능한 타입의 경우 String 타입이어야 하며, 아닐 경우 오류가 발생한다.
  • 출력은 입력으로 들어온 반복 가능한 String 타입 사이에 기존 String이 포함되는 형태로 동작한다.
  • Python에서는 간혹 특정 String 타입의 특정 부분을 변경하라는 문제가 나오는 경우가 있는데, String 타입의 특징 상, 중간에 있는 특정 부분의 값을 변경하는 것이 불가능하다. (immutable)
  • 이를 변경하기 위해, Stringlist로 타입 변경하고, 원하는 부분을 수정한 후, 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()과 반대 역할을 하므로, 이도 알아두면 도움이 많이된다.
  • 추가적으로 문제를 풀다가, 도움이 될만한 내용이 있으면, 리뷰할 수 있도록 하겠습니다.

comments