EXCELSIOR

[Level1]문자열 내 마음대로 정렬하기 (strange_sort) 본문

Python/알고리즘_문제

[Level1]문자열 내 마음대로 정렬하기 (strange_sort)

Excelsior-JH 2016. 10. 22. 15:10

1. 문제

strange_sort함수는 strings와 n이라는 매개변수를 받아들입니다.

strings는 문자열로 구성된 리스트인데, 각 문자열을 인덱스 n인 글자를 기준으로 정렬하면 됩니다.


예를들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1인 문자 u, e ,a를 기준으로 정렬해야 하므로 결과는 ["car", "bed", "sun"]이 됩니다.

strange_sort함수를 완성해 보세요.


2. 풀이

1) 내가 작성한 코드

- itemgetter 모듈을 import 하여 문제를 해결하였다. 

from _operator import itemgetter
def strange_sort(strings, n):
    '''strings의 문자열들을 n번째 글자를 기준으로 정렬해서 return하세요'''
    return sorted(strings, key=itemgetter(n))

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( strange_sort(["sun", "bed", "car"], 1) )

2) 다른 풀이

- lambda를사용하여 풀었는데, lambda 대해 공부해야겠다.

def strange_sort(strings, n):
    '''strings의 문자열들을 n번째 글자를 기준으로 정렬해서 return하세요'''
    return sorted(strings, key=lambda x: x[n])

strings = ["sun", "bed", "car"] 
print(strange_sort(strings, 1))

3. 알아둘 것

1) 람다(lambda) 함수

- 축약함수이며 함수와 같은 기능을 한다.

- 표현식

lambda 인자 : 표현식


2) 예제 코드

① 인수

def hap(x,y):
    return x + y
 
print(hap(10, 20))
 
print((lambda x,y: x + y )(10,20))
#한줄로 나타낼 수 있다!


②함수의 인수로 사용 예

f = lambda g,a,b:g(a,b)
def g(x,y):
    return x*y
 
print(f(g,2,3))
>> 6

 ## lambda로 나타내기
def f(g,a,b):
    return g(a,b)

print(f(lambda a,b:a*b, 2,3))
>> 6


③ 가변인자 : 튜플형

def func(*arg):
    return arg

print(func(1,2,3,4,5,6,7))
>> (1,2,3,4,5,6,7)

##lambda로 나타내기
f = lambda x,*arg : x + arg
print(f((1,2),3,4,5,6)) #arg가 튜플형이므로 x도 튜플형이어야 한다.
>>(1,2,3,4,5,6)

[출처: http://thrillfighter.tistory.com/356]

Comments