코딩테스트 연습 - [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]| [코테] 프로그래머스 파이썬 Lv2. 숫자변환하기 (0) | 2024.01.08 |
|---|---|
| [코테] 프로그래머스 파이썬 Lv2. k진수에서 소수 개수 구하기 - 소수와 진수 (0) | 2024.01.06 |
| [코테] 프로그래머스 파이썬 Lv2. [1차] 프렌즈4블록 (0) | 2024.01.06 |
| [코테] 프로그래머스 파이썬 Lv2. 오픈채팅방 (0) | 2024.01.05 |
| [코테] 프로그래머스 파이썬 Lv2. 스킬트리 (0) | 2024.01.04 |