파이썬 자주 쓰는 문법 & 원라이너 치트시트: 복붙해서 바로 쓰는 실전 패턴 모음 커버 이미지
개발자

파이썬 자주 쓰는 문법 & 원라이너 치트시트: 복붙해서 바로 쓰는 실전 패턴 모음

파이썬 원라이너 치트시트. 리스트 중복 제거, 리스트 평탄화, 딕셔너리 합치기·정렬, zip 전치, f-string 포맷팅까지 — 개발자가 매번 검색하는 파이썬 관용구를 복사해서 바로 쓰세요.

코딩하는 상인 편집부·· 읽기 9출처 없음

파이썬 자주 쓰는 문법 & 원라이너 치트시트: 복붙해서 바로 쓰는 실전 패턴 모음

파이썬을 쓰다 보면 "이거 한 줄로 어떻게 쓰더라?"를 끊임없이 검색하게 됩니다. "파이썬 리스트 중복 제거", "딕셔너리 정렬", "리스트 평탄화"… 결국 매번 같은 스택오버플로우 답변을 찾게 되죠.

이 글은 그 검색을 끝내기 위한 레퍼런스입니다. 실무와 PS 양쪽에서 자주 쓰는 파이썬 관용구(idiom)와 원라이너만 모았고, 전부 복사해서 바로 붙여넣을 수 있게 정리했습니다. 앞선 [파이썬 알고리즘 치트시트]의 후속 편입니다.

동작 환경: Python 3.8+ (대부분 표준 문법, 일부는 3.9+ / 3.10+ 표기)


1. 리스트 컴프리헨션

파이썬의 핵심. for문을 한 줄로 압축합니다.

# 기본
squares = [x ** 2 for x in range(10)]

# 조건 필터링 (if는 뒤에)
evens = [x for x in range(10) if x % 2 == 0]

# 조건부 값 (if-else는 앞에)
labels = ["짝" if x % 2 == 0 else "홀" for x in range(10)]

# 중첩 반복 (이중 for문)
pairs = [(i, j) for i in range(3) for j in range(3)]

2. 딕셔너리 / 집합 컴프리헨션

# 딕셔너리 컴프리헨션
squared = {x: x ** 2 for x in range(5)}        # {0:0, 1:1, 2:4, ...}

# 두 리스트를 딕셔너리로
keys = ['a', 'b', 'c']
vals = [1, 2, 3]
d = {k: v for k, v in zip(keys, vals)}         # {'a':1, 'b':2, 'c':3}

# 키-값 뒤집기
inverted = {v: k for k, v in d.items()}

# 집합 컴프리헨션 (중복 자동 제거)
unique = {x % 3 for x in range(10)}            # {0, 1, 2}

3. 리스트 중복 제거

# 순서 상관없을 때
unique = list(set(arr))

# 순서 유지하며 중복 제거 (Python 3.7+ dict 순서 보장)
unique = list(dict.fromkeys(arr))

4. 리스트 평탄화 (flatten)

2차원 리스트를 1차원으로.

nested = [[1, 2], [3, 4], [5, 6]]

# 컴프리헨션
flat = [x for row in nested for x in row]      # [1, 2, 3, 4, 5, 6]

# itertools 사용
from itertools import chain
flat = list(chain.from_iterable(nested))

# sum 트릭 (작은 리스트에만, 느림 주의)
flat = sum(nested, [])

5. enumerate / zip

인덱스와 값을 동시에, 또는 여러 리스트를 동시에 순회.

# 인덱스 + 값
for i, val in enumerate(arr):
    print(i, val)

# 시작 인덱스 지정
for i, val in enumerate(arr, start=1):
    print(i, val)

# 여러 리스트 동시 순회
for a, b in zip(list1, list2):
    print(a, b)

# zip으로 2차원 리스트 전치 (transpose)
matrix = [[1, 2, 3], [4, 5, 6]]
transposed = list(zip(*matrix))                # [(1,4), (2,5), (3,6)]

6. 변수 교환 / 다중 할당 (언패킹)

# 두 변수 swap (임시 변수 불필요)
a, b = b, a

# 다중 할당
x, y, z = 1, 2, 3

# 별표 언패킹: 나머지 묶기
first, *rest = [1, 2, 3, 4]    # first=1, rest=[2, 3, 4]
*init, last = [1, 2, 3, 4]     # init=[1, 2, 3], last=4
a, *mid, b = [1, 2, 3, 4, 5]   # a=1, mid=[2,3,4], b=5

7. 슬라이싱 트릭

arr[::-1]      # 리스트/문자열 뒤집기
arr[::2]       # 짝수 인덱스만 (스텝 2)
arr[1::2]      # 홀수 인덱스만
arr[-3:]       # 마지막 3개
arr[:-3]       # 마지막 3개 제외
arr[:]         # 얕은 복사 (shallow copy)

8. 문자열 처리

가장 자주 검색되는 영역입니다.

s = "hello world"

s.upper()                 # 'HELLO WORLD'
s.lower()                 # 'hello world'
s.title()                 # 'Hello World'
s.replace("o", "0")       # 'hell0 w0rld'
s.split()                 # ['hello', 'world'] (공백 기준)
s.split(",")              # 콤마 기준 분리
"-".join(["a", "b", "c"]) # 'a-b-c'
s.strip()                 # 양쪽 공백 제거
s[::-1]                   # 문자열 뒤집기

# 문자 빈도 세기
from collections import Counter
Counter("banana")         # {'a': 3, 'n': 2, 'b': 1}

# 숫자만 추출
"".join(c for c in "a1b2c3" if c.isdigit())   # '123'

9. f-string 포맷팅

Python 3.6+의 표준 포맷팅 방식.

name, score = "Kim", 95.6789

f"{name}님의 점수: {score}"          # 'Kim님의 점수: 95.6789'
f"{score:.2f}"                      # '95.68' (소수점 2자리)
f"{1000000:,}"                      # '1,000,000' (천 단위 콤마)
f"{42:05d}"                         # '00042' (0 채움)
f"{0.25:.1%}"                       # '25.0%' (퍼센트)
f"{255:x}"                          # 'ff' (16진수)
f"{name=}"                          # "name='Kim'" (디버깅, 3.8+)

10. 조건 표현식 (삼항 연산자)

# 값 = 참일때 if 조건 else 거짓일때
result = "양수" if x > 0 else "음수 또는 0"

# 기본값 처리
name = user_name if user_name else "익명"
name = user_name or "익명"          # 더 짧게 (falsy 값 처리)

11. any / all

nums = [2, 4, 6, 8]

all(x % 2 == 0 for x in nums)       # 모두 짝수? → True
any(x > 5 for x in nums)            # 하나라도 5 초과? → True
all(nums)                           # 모든 원소가 truthy?
any(nums)                           # 하나라도 truthy?

12. 딕셔너리 안전하게 다루기

d = {"a": 1, "b": 2}

d.get("c")                # None (KeyError 없음)
d.get("c", 0)             # 0 (기본값 지정)
d.setdefault("c", []).append(1)     # 없으면 [] 생성 후 추가

# 딕셔너리 합치기 (3.9+)
merged = d1 | d2
# 3.5+ 호환 방식
merged = {**d1, **d2}

# 값 기준 정렬
sorted(d.items(), key=lambda x: x[1])              # 값 오름차순
sorted(d.items(), key=lambda x: x[1], reverse=True) # 값 내림차순

# 최댓값을 가진 키
max(d, key=d.get)

13. map / filter / lambda

# 문자열 리스트 → 정수 리스트
nums = list(map(int, ["1", "2", "3"]))

# 입력 한 줄 파싱 (PS 단골)
a, b, c = map(int, input().split())

# 조건 필터링
evens = list(filter(lambda x: x % 2 == 0, range(10)))

# reduce (누적 계산)
from functools import reduce
total = reduce(lambda acc, x: acc + x, [1, 2, 3, 4])   # 10

14. 최댓값 / 최솟값 활용

nums = [3, 1, 4, 1, 5, 9]

max(nums)                 # 9
min(nums)                 # 1
sum(nums)                 # 23

# key를 이용한 최댓값
words = ["apple", "kiwi", "banana"]
max(words, key=len)       # 'banana' (가장 긴 문자열)

# 최댓값의 인덱스
nums.index(max(nums))     # 5

# 상위 N개
import heapq
heapq.nlargest(3, nums)   # [9, 5, 4]
heapq.nsmallest(3, nums)  # [1, 1, 3]

15. 숫자 다루기

divmod(17, 5)             # (3, 2) — 몫과 나머지 동시에
abs(-7)                   # 7
round(3.14159, 2)         # 3.14
pow(2, 10)                # 1024
pow(2, 10, 1000)          # 24 — (2^10) % 1000, 모듈러 거듭제곱

# 진법 변환
bin(10)                   # '0b1010'
oct(10)                   # '0o12'
hex(255)                  # '0xff'
int("1010", 2)            # 10 — 2진수 문자열 → 정수
int("ff", 16)             # 255

# 자릿수 합
sum(int(d) for d in str(12345))   # 15

16. 정렬 응용

sorted(arr)                          # 오름차순 (원본 유지)
sorted(arr, reverse=True)            # 내림차순
arr.sort()                           # 제자리 정렬 (반환값 없음)

# 다중 기준
sorted(data, key=lambda x: (x[1], -x[0]))   # 2번째 오름, 1번째 내림

# 문자열 길이순
sorted(words, key=len)

17. 파일 / 입력 한 줄 처리

# 파일 전체를 줄 리스트로
with open("file.txt") as f:
    lines = f.read().splitlines()

# 파일을 한 줄씩 처리 (메모리 효율적)
with open("file.txt") as f:
    for line in f:
        process(line.rstrip())

# 여러 줄 입력 한 번에 (PS)
import sys
data = sys.stdin.read().split()

18. 알아두면 편한 짧은 문법들

# 카운트다운 반복
for i in range(10, 0, -1):
    print(i)

# 같은 값으로 리스트 채우기
zeros = [0] * 5                      # [0, 0, 0, 0, 0]

# 범위 검사 (체이닝)
if 0 <= x < 100:                     # 0 이상 100 미만
    ...

# 월러스 연산자 (3.8+) — 할당과 동시에 사용
while (line := input()) != "end":
    print(line)

# 여러 값 중복 체크
if x in (1, 2, 3):
    ...

# 중첩 삼항 대신 딕셔너리 매핑
grade = {90: "A", 80: "B", 70: "C"}.get(score // 10 * 10, "F")

마무리

여기 정리한 패턴들은 검색 → 복붙 → 수정의 사이클을 크게 줄여줍니다. 파이썬의 강점은 "한 줄로 의도를 표현하는 능력"이고, 이 관용구들이 익숙해지면 코드가 짧아질 뿐 아니라 읽기도 쉬워집니다.

다만 한 줄에 집착해 가독성을 해치는 건 본말전도입니다. 복잡한 컴프리헨션을 세 번 중첩하느니 평범한 for문이 나을 때도 많으니, "짧게"보다 "명확하게"를 기준으로 선택하세요.

다음 편에서는 이 시리즈를 이어 다른 실전 주제로 찾아오겠습니다. 이 글이 도움이 됐다면 북마크해두고 필요할 때마다 꺼내 쓰세요.

함께 보면 좋은 글