상세 컨텐츠

본문 제목

[코테] 프로그래머스 파이썬 Lv2. [3차] 파일명 정렬 - 람다 표현식 관련

코테

by Graceful_IT 2024. 1. 6. 22:25

본문

코딩테스트 연습 - [3차] 파일명 정렬 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

해당 조건으로 파일명 정렬 프로그램을 구현하기 위해서는 sorted() 및 lambda를 사용해야 짧은 코드를 작성할 수 있었다. 

파일명은 2가지 조건으로 정렬되는데, 숫자가 나오기 전 HEAD부분을 기준으로 사전순으로 정렬한다. 두번째 조건은 HEAD 후에 나오는 NUMBER 순으로 정렬한다.

def solution(files):
    file_Dic ={}
    while files :
        a = files.pop(0)
        temp = ''
        head = ''
        for i in a :
            if i.isdigit() :
                temp+=i
            elif not temp :
                head+=i
                pass
            else:
                break
        file_Dic[a] = (head.upper(),int(temp))
        print(file_Dic)
        
    return sorted(file_Dic.keys(),key = lambda x : (file_Dic[x]))

 

 

그렇기 때문에 기존부터 헷갈렸던 lambda를 정리해보았다. 람다 표현식은 자주 쓰이는 filter, sorted와 같은 함수를 인자로 받을 때 자주 사용된다고 한다.


파이썬에서 람다 표현식은 ' lambda 인자: 표현식' 과 같은 구조를 가진다.

# 함수를 인자로 받는 고차 함수나 간단한 로직을 표현할 때 활용
add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

 

 

람다와 함께 쓰이는 메서드와 같이 쓰인 예시를 알아보았다.

첫째는 map()이다. map() 함수는 주어진 함수를 리스트나 다른 반복 가능한(iterable) 객체의 각 요소에 적용하여 새로운 리스트를 반환한다. ' map(함수, 반복 가능한 객체) '구조로 구성되어 있다.

# 각 요소를 제곱하는 예시
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # 출력: [1, 4, 9, 16, 25]

 

 

둘째는 조건에 맞는 요소만 남기는 filter()이다.

# 10보다 작은 값만 필터링하는 예시
data = [8, 12, 5, 18, 7, 10]
filtered = list(filter(lambda x: x < 10, data))
print(filtered)  # 출력: [8, 5, 7]

 

 

셋째는 요소들을 정렬하는 sorted()이다.

# 문자열 길이에 따라 정렬하는 예시
words = ['apple', 'banana', 'orange', 'grape']
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)  # 출력: ['apple', 'grape', 'banana', 'orange']

 

 


filter()의 활용예시로 특정 값을 제거하는 코드를 찾아보았다.

조건에 맞는 요소들만 유지하고 나머지는 제거하는 코드이다.

my_list = [1, 2, 3, 4, 2, 5]
value_to_remove = 2
filtered_list = list(filter(lambda x: x != value_to_remove, my_list))
print(filtered_list)  # 출력: [1, 3, 4, 5]

 

이외에도 리스트 컴프리헨션이나 remove() 메서드, del 키워드를 사용함으로써 같은 코드를 구현할 수 있음으로 가독성을 위해 과용하지 않는 것이 좋다.

# 리스트 컴프리헨션
my_list = [1, 2, 3, 4, 2, 5]
value_to_remove = 2
new_list = [x for x in my_list if x != value_to_remove]
print(new_list)  # 출력: [1, 3, 4, 5]


# remove() 메서드
my_list = [1, 2, 3, 4, 2, 5]
value_to_remove = 2
my_list.remove(value_to_remove)
print(my_list)  # 출력: [1, 3, 4, 2, 5]


# del 키워드 사용
my_list = [1, 2, 3, 4, 2, 5]
index_to_remove = 1
del my_list[index_to_remove]
print(my_list)  # 출력: [1, 3, 4, 2, 5]

관련글 더보기