실무에서 진짜 자주 쓰는 Python one-liner 10개 (쓰다 보면… 나도 모르게 “마법사” 소리 듣습니다)
기억해둘 한 줄: one-liner는 뽐내기용이 아니라, 불필요한 마찰을 줄이는 기술입니다.

1) Flatten Nested Lists (matrix를 한 줄 list로 펼치기)
데이터가 종종 nested로 오죠. list 안에 list가 들어있는 형태—딱 matrix 같은 구조요. 근데 결과는 “한 줄짜리 list”로 받고 싶을 때가 많습니다.
그럴 때 단골로 나오는 list comprehension은 이거예요.
flattened = [item for sublist in nested for item in sublist]
처음 보면 주문 같지만, 사실은 단순해요. for 두 번 돌리는 걸 한 줄에 넣은 것뿐.
- for sublist in nested : 바깥 list를 훑고
- for item in sublist : 안쪽 list의 요소를 꺼내고
- 최종적으로 item들을 새 list에 쫙 담아버립니다
좋은 이유? 구조 크기를 미리 몰라도 됩니다.
행 길이가 들쭉날쭉한 “삐뚤한 matrix”여도 상관없어요. a b c d e f처럼 균일하지 않은 sublist가 섞여 있어도 그대로 깔끔하게 flatten 됩니다.
2) Swap Two Variables (temp 없이 자리 바꾸기)
변수 두 개 값 교환… 별거 아닌데 은근 자주 합니다. 근데 많은 언어에서는 이런 식으로 번거롭게 하죠.
temp = a
a = b
b = temp
Python은 딱 한 마디 합니다. “그거 왜 그렇게 해?”
a, b = b, a
끝.
이게 좋은 포인트는:
- temp variable이 필요 없고
- 3줄짜리 shuffle도 없어지고
- in-place로 깔끔하게 바뀝니다
그리고 여기서 더 재밌는 점. 이 방식은 여러 개도 한 번에 swap이 돼요. 콤마로 쭉 이어주면 됩니다.
array element에서도 작동합니다(처음 보면 좀 신기해요).
arr[0], arr[1] = arr[1], arr[0]
추가 assignment까지 섞어서 쓸 수도 있는데, 현실에서는 조금 과한 느낌이 날 때도 있어요. 그래도 tuple unpacking이 그만큼 유연하다는 얘기죠.
3) Read a File into a List of Lines (\n 때문에 머리 아플 일 줄이기)
text file, config file, JSON file, log… file I/O는 도망갈 수가 없죠. “한 줄씩 리스트로 읽어오고 싶은데, 줄 끝에 \n 붙어서 귀찮다”는 상황도 자주 오고요.
이럴 때 손에 익혀두면 좋은 한 줄:
lines = open("file.txt", "r").read().splitlines()
여기서 MVP는 .splitlines()입니다.
이게 해주는 일:
- 파일 내용을 한 번에 읽고
- newline 기준으로 쪼개서 list로 만들고
- 각 줄 끝에 붙는 \n까지 깔끔하게 제거해줍니다
스크립트에서는 pathlib로 파일에 text를 써놓고 다시 읽어오는 데모가 나오는데, 결과가 정말 “정리된 lines list”로 뚝 떨어져요.
참고로 production에서는 context manager(with open(...) as f:)로 여는 게 정석이긴 해요. 하지만 핵심은 “행 단위로 깔끔하게 가져오는 방법” 자체니까요.
4) Count Occurrences with Counter (collections module의 숨은 강자)
Python의 collections module은 진짜 유용한 게 많습니다. 그중에서도 Counter는… 한 번 맛보면 계속 찾게 돼요.
먼저 import.
from collections import Counter
그리고 list의 값들이 얼마나 등장했는지 세고 싶다면:
counts = Counter(values)
for loop 돌려서 dict 만들고 증가시키고… 그런 수고가 확 사라집니다.
반환되는 건 Counter object인데, 느낌은 dict랑 꽤 비슷해요.
- key = 값
- value = 등장 횟수
게다가 이런 것도 되죠.
counts.most_common(1)
가장 많이 나온 요소(들)를 바로 뽑을 수 있어요. 1등, 2등… 이런 식으로요.
스크립트에서는 “the cat sat on the mat”을 띄어쓰기 기준으로 split해서 넣는 예시도 나옵니다. 그러면 letter가 아니라 word frequency가 잡히죠. text processing 할 때 아주 쓸만합니다.
5) Reverse an Iterable (처음 보면 “치트키” 느낌)
이건 진짜 처음 보면 반응이 비슷해요. “뭐야 이거 왜 돼?”
string이든 list든, 순서가 있는 sequence를 뒤집고 싶으면 slicing을 이렇게 씁니다.
reversed_seq = seq[::-1]
slice 문법이 start : stop : step인데, start/stop을 비워두고 step만 -1로 주면 거꾸로 걷는 거죠.
데모에서는 **“radar”**가 palindrome이라서 뒤집어도 똑같다고 보여주고, 이걸로 palindrome 체크도 빠르게 가능하다고 합니다.
문자열만 되는 게 아니라, indexing과 order가 있는 sequence라면 대체로 잘 통합니다.
6) Conditional Assignment (inline if/else로 깔끔하게)
변수 하나를 조건에 따라 정하고 싶은데, 굳이 if 블록을 늘리고 싶지 않을 때 있잖아요. 그럴 때 유용한 패턴:
result = value_if_true if condition else value_if_false
스크립트 예시는 아주 직관적이에요.
x = 4
result = "even" if x % 2 == 0 else "odd"
이 방식은 default value 설정, 간단한 “clamping”(예: score if score < 100 else 100) 같은 곳에서도 잘 쓰입니다.
list comprehension 안에서도 활용 가능해서, 한 줄에 의도가 묶이는 장점이 있어요.
7) Chained Comparisons (range check를 ‘사람 말’처럼)
Python의 매력 중 하나인데, 의외로 모르는 분들이 많습니다.
보통은 이렇게 쓰죠.
a < b and b < c
Python은 이렇게도 됩니다.
a < b < c
특히 이런 range check가 엄청 읽기 좋아져요.
1 < x < 10
조건을 두 번 쓰지 않아도 되고, 눈으로 보면 의미가 바로 들어옵니다. 스크립트에서도 “유효한 syntax이고, 실행 결과도 기대대로 나온다”는 걸 강조합니다.
8) Create a Comma-Separated String from a List (join의 정석 활용)
list를 보기 좋은 문자열로 만들 때, .join()은 거의 필수죠.
s = ", ".join(map(str, items))
여기서 map(str, ...)를 쓰는 이유는 간단해요. .join()은 string만 받습니다. list 안에 number가 섞여 있으면 먼저 string conversion을 해줘야 에러가 안 나요.
흐름은 딱 두 단계:
- 각 요소를 string으로 바꾸고
- delimiter(예: ", ")로 합칩니다
데모에서는 delimiter를 바꿔서 출력이 달라지는 것도 보여줘요.
- comma+space면 "1, 2, 3, 4"
- pipe로 바꾸면 "1|2|3|4"
- 값 추가하면 자연스럽게 업데이트
이미 string list라면 map(str, ...) 없이도 join이 됩니다.
9) Pretty Print a Nested Structure (pprint로 눈이 편해지는 순간)
큰 JSON을 그냥 print()로 찍으면… 한 줄에 길게 늘어져서 읽기가 거의 고문이죠. (진짜로요.)
그럴 때 pprint:
from pprint import pprint
pprint(data)
이렇게 하면 nested structure가 보기 좋게 정돈되어 출력됩니다. 스크립트에서는 옵션도 언급해요.
- depth (몇 단계까지 보여줄지)
- indentation
- width
- compact
API request/response, 큰 dict, nested JSON 같은 걸 다룰 때 디버깅 효율이 확 올라갑니다. 한마디로 “흐릿한 유리창을 닦은 느낌”이랄까요.
10) “Braces in Python?” (가벼운 Easter egg로 마무리)
마지막은 실용성보단 재미 쪽입니다. 그래도 기억에 남아요.
__future__ module에서 braces를 import하려고 하면:
from __future__ import braces
custom exception이 뜨고, 메시지는 대략 “not a chance” 같은 뉘앙스예요. “Python에 curly braces 넣는 건… 응, 아니야”라는 농담이죠.
그리고 또 하나의 유명한 Easter egg:
import antigravity
실행하면 Python 관련 comic이 있는 웹페이지가 열립니다. 언어에 이런 장난기가 들어있다는 게 은근 매력이죠. “코딩은 진지하지만, 꼭 딱딱할 필요는 없다”는 느낌으로 끝내는 것도 좋고요.
한 번에 정리: 결국 이 one-liner들이 중요한 이유
one-liner는 “코드 줄이기 대회”가 아닙니다.
핵심은 딱 이거예요.
- Reducing noise: boilerplate를 줄이고
- Increasing clarity: 적절히 쓰면 오히려 읽기 쉬워지고
- Speeding up common tasks: file 처리, data cleaning, swapping, counting 같은 반복 작업을 빠르게
무엇보다 이건 party trick이 아니에요.
script, automation, data 작업, backend service, 디버깅… 시간과 집중력이 부족한 상황에서 특히 자주 꺼내게 됩니다.
그리고 네, 몇 개만 손에 익히면—본인도 모르게—Python을 꽤 잘하는 사람처럼 보이긴 합니다.
FAQ (2026년 기준으로 사람들이 실제로 자주 묻는 질문들)
1) Python one-liner는 좋은 습관인가요, 아니면 그냥 멋부리기인가요?
코드가 더 명확해지고 boilerplate가 줄어든다면 좋은 습관이에요. 반대로 읽는 사람이 인상 찌푸리면 그건 one-liner의 패배.
2) production에서 가장 “안전하게” 써도 되는 건 뭐예요?
a, b = b, a 같은 swapping, Counter, join, chained comparisons는 대체로 가독성이 좋아서 무난합니다.
3) 왜 a, b = b, a가 가능한 거죠?
오른쪽 값을 tuple 형태로 묶어서, 왼쪽에 unpacking하는 방식이라 temp 없이도 교환이 됩니다.
4) flatten은 언제나 list comprehension이 최선인가요?
한 단계 nested에는 정말 좋아요. 하지만 깊게 nested된 구조는 recursion이나 itertools 같은 도구가 필요할 수 있습니다.
5) .splitlines()가 read().split("\n")보다 나은 이유는요?
newline 처리 방식이 더 유연하고, 줄 끝 문자를 깔끔하게 제거해줘서 실전에서 안정적입니다.
6) seq[::-1]는 모든 iterable에서 되나요?
slicing 가능한 sequence(string, list, tuple 등)에 잘 맞아요. generator 같은 건 slicing이 안 될 수 있습니다.
7) chained comparisons는 and보다 더 빠른가요?
약간의 효율 이점이 있을 수 있지만, 핵심 가치는 성능보단 가독성입니다.
8) 왜 .join()은 string만 받아요?
효율적으로 string을 만들기 위한 방식이라 그래요. non-string이 있으면 map(str, ...)로 변환해두면 type error를 막을 수 있습니다.
9) pprint는 언제 쓰는 게 좋아요?
nested data가 크거나 복잡할 때요. 특히 JSON/dict가 여러 겹이면 pprint가 시야를 확 열어줍니다.
10) import antigravity 같은 Easter egg는 왜 있는 거예요?
실용 목적은 거의 없고, 문화와 유머요. 언어가 딱딱하지만은 않다는 작은 신호랄까요.
11) 면접에서 one-liner 써도 될까요?
가능해요. 단, “읽기 쉬운 곳”에서만요. 면접관은 clever보다 clear를 더 좋아하는 경우가 많습니다.
12) 이걸 어떻게 외우죠?
작은 script로 반복해보는 게 제일 빨라요. flatten 한 번, reverse 한 번, file parsing 한 번, word count 한 번… 손이 먼저 기억합니다.
'SW > Python' 카테고리의 다른 글
| 2026년 Python 독학 로드맵: 초보자가 가장 빠르게 배우는 현실적인 방법 정리 (0) | 2026.03.09 |
|---|---|
| Matplotlib 사용법 완전 정리: 설치부터 그래프 그리기까지 한 번에 배우기 (0) | 2026.02.20 |
| Python NumPy 기초부터 실전 예제까지 한 번에 정리한 완전 가이드 (array·axis·reshape 설명) (0) | 2026.02.11 |
| FastAPI로 CRUD API 만드는 방법: Issue Tracker 예제로 배우는 실전 FastAPI 입문 (0) | 2026.02.07 |
| FastAPI + React + Clerk로 B2B SaaS 애플리케이션 구축하기 (2025 SEO 최적화 가이드) (0) | 2026.01.31 |