Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

프로그래머가 꼭 알아야 할 파이썬(Python) 필수 팁과 요령 11가지

경쟁 프로그래밍 대회나 회사 프로젝트에서 파이썬으로 코드를 작성하다 보면, 더 적은 코드로 더 빠르게 동작하는 프로그램을 만들어야 하는 순간이 자주 찾아옵니다. 이 글에서는 그럴 때 유용하게 쓸 수 있는 파이썬 팁과 요령을 예제 코드와 실행 결과와 함께 정리했습니다.

1. 두 변수 값 한 줄로 교환하기

파이썬은 튜플 언패킹 덕분에 임시 변수 없이도 두 변수의 값을 아주 간단하게 맞바꿀 수 있습니다.

x, y = 50, 70
print(x, y)

# 값 교환
x, y = y, x
print(x, y)

실행 결과

50 70
70 50

2. 리스트를 하나의 문자열로 합치기

join() 메서드를 사용하면 리스트의 여러 문자열 요소를 원하는 구분자로 손쉽게 하나의 문자열로 연결할 수 있습니다.

lst = ['What', 'a', 'fine', 'morning']
print(" ".join(lst))

실행 결과

What a fine morning

3. 리스트에서 중복 요소 제거하기

set()을 사용하면 중복을 제거할 수 있지만 원래 순서가 사라집니다. 순서를 유지해야 한다면 collections 모듈의 OrderedDict를 활용하는 것이 좋습니다.

# 순서가 유지되지 않는 방법
lst = [2, 4, 4, 9, 13, 4, 2]
print("원본 리스트:", lst)
new_lst = list(set(lst))
print(new_lst)

# 순서가 유지되는 방법
from collections import OrderedDict
lst = [2, 4, 4, 9, 13, 4, 2]
print(list(OrderedDict.fromkeys(lst).keys()))

실행 결과

원본 리스트: [2, 4, 4, 9, 13, 4, 2]
[9, 2, 4, 13]
[2, 4, 9, 13]

4. 문자열 뒤집기

슬라이싱 문법 [::-1]을 사용하면 문자열을 거꾸로 뒤집을 수 있습니다. 알파벳 전체처럼 긴 문자열에도 동일하게 적용됩니다.

s = "Hello, World!"
print(s[::-1])

letters = ("abcdefghijklmnopqrstuvwxyz")
print(letters[::-1])

실행 결과

!dlroW ,olleH
Zyxwvutsrqponmlkjihgfedcba

5. 리스트 뒤집기

문자열과 마찬가지로 리스트에도 슬라이싱 [::-1]을 적용하면 요소 순서를 반대로 뒤집을 수 있습니다.

lst = [20, 40, 60, 80]
print(lst[::-1])

실행 결과

[80, 60, 40, 20]

6. 2차원 배열 전치하기

zip(*matrix)를 사용하면 행렬의 행과 열을 서로 바꾸는 전치(transpose)를 한 줄로 처리할 수 있습니다. 예를 들어 2×3 행렬은 전치 후 3×2 행렬이 됩니다.

matrix = [['a', 'b', 'c'], ['d', 'e', 'f']]
transMatrix = zip(*matrix)
print(list(transMatrix))

실행 결과

[('a', 'd'), ('b', 'e'), ('c', 'f')]

7. 두 문자열이 애너그램인지 확인하기

collections.Counter를 사용하면 각 문자열의 문자 개수를 세어 비교함으로써 애너그램 여부를 간단히 판별할 수 있습니다. 단, 대소문자는 서로 다른 문자로 취급된다는 점에 유의하세요.

from collections import Counter

def is_anagram(str1, str2):
    return Counter(str1) == Counter(str2)

print(is_anagram('hello', 'ollhe'))   # True
print(is_anagram('Hello', 'hello'))   # False (대소문자 구분)

실행 결과

True
False

8. 파이썬 객체 내부 들여다보기

dir() 함수를 사용하면 객체가 가진 속성과 메서드 목록을 한눈에 확인할 수 있어, 객체 탐색이나 디버깅에 매우 유용합니다.

lst = [1, 3, 4, 7, 9]
print(dir(lst))

실행 결과

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

9. enumerate()로 인덱스와 값을 함께 꺼내기

enumerate()를 사용하면 반복문에서 리스트의 인덱스와 값을 동시에 얻을 수 있어, range(len(...))을 쓰는 번거로움을 없애고 코드를 더 깔끔하게 만들어 줍니다.

lst = [20, 10, 40, 50, 30, 40]
for i, value in enumerate(lst):
    print(i, ':', value)

실행 결과

0 : 20
1 : 10
2 : 40
3 : 50
4 : 30
5 : 40

10. 임의의 수의 팩토리얼 구하기

functools.reduce()와 lambda를 조합하면 한 줄로 팩토리얼을 계산할 수 있습니다. 참고로 표준 라이브러리의 math.factorial()을 사용하는 것도 좋은 방법입니다.

import functools

result = (lambda s: functools.reduce(int.__mul__, range(1, s + 1), 1))(5)
print(result)

실행 결과

120

11. 두 시퀀스를 묶어 딕셔너리 만들기

키 후보와 값 후보가 담긴 두 시퀀스를 zip()으로 묶은 뒤 dict()로 변환하면 딕셔너리를 손쉽게 생성할 수 있습니다.

x1 = ('Name', 'EmpId', 'Sector')
y1 = ('Zack', 4005, 'Finance')
print(dict(zip(x1, y1)))

실행 결과

{'Name': 'Zack', 'EmpId': 4005, 'Sector': 'Finance'}

마무리

위에서 소개한 기법들은 모두 파이썬다운(Pythonic) 코드를 작성하는 데 큰 도움이 됩니다. 슬라이싱, zip(), enumerate(), Counter 같은 내장 기능을 적극적으로 활용하면 코드가 짧아질 뿐만 아니라 가독성과 실행 효율도 함께 좋아집니다. 실제 프로젝트나 코딩 테스트에서 직접 적용해 보며 자연스럽게 익혀 보시기 바랍니다.