직접 코딩하면서 정리한 Python One-liner 사용기

Spes Lim·2021년 1월 7일
3

Algorithm

목록 보기
2/2

알고리즘 문제에서 풀이가 정형화 되어있는 팰린드롬(Palindrome) 문제를
풀면서 파이썬의 원 라이너 문법 사용 후기를 간단하게 적어봤습니다.

Python One-liner in code

파이썬의 직관적인 문법 덕분에, 한줄 코딩이 가능하다. 이를 사람들이 One-liner 라고 부른다.

# 회문 by 파이썬 문자열 슬라이싱
phrase.find(phrase[::-1])

# 메모리 스왑
a, b = b, a

# 인덱스 9번까지 값 더하기 by 문자열 슬라이싱
sum(list[::9])

# Factorial 생성
reduce(lambda x, y: x * y, range(1, n+1))

# Fibonacci 생성
lambda x: x if x<=1 else fib(x-1) + fib(x-2)

# 파일 읽기
[line.strip() for line in open(file_name)]

# 주어진 리스트에서 엘리먼트의 값이 -10인 인덱스 반환 하기
list = [1, 2, 3, ... ]

[i for i in range(len(list)) if list [i] == -10]

# 정수 값을 받았을 때, 팰린드롬이 맞는지 bool값으로 확인하는 코드
class Solution:
    def isPalindrome(self, x: int) -> bool:
        return True if (x >= 0 and str(x) == str(x)[::-1]) else False

# list comprehension
num = []
for i in range(1, 11):
	num.append(i)
    
이 코드를 list comprehension 으로 바꾸면 다음과 같다.
num = [i for i in range(10)]

위의 나열한 원 라이너 문법은 읽기에도 큰 문제가 없지만 조건 절의 경우는

  • 조건식의 길이가 너무 길지 않을 것
  • 리턴 값이 boolean 값 일 것

위 두 가지를 모두 만족했을 때 읽기 편한 느낌을 받았다.

List Comprehension

  • 엘리먼트를 하나씩 담은 리스트를 반환 하기 때문에 메모리 소모가 크다.
  • 코드에 따라서 다르지만, 중복 작업으로 인해 생성되는 메모리가 클 경우 파이썬 제너레이터 표현식을 사용한다.
  • 제너레이터 표현식에 대한 부분은 이터레이터(iterator) 개념과 함께 차후 후술할 계획입니다.
  • 여담으로, 카카오 코딩테스트 문제 중 하나인 오픈채팅방 문제도 리스트 컴프리헨션을 이용하여 풀 수 있으니 도전해 보시는 걸 추천 드립니다.
profile
Software Developer

0개의 댓글