본문 바로가기
Programming Language/Python

[python] 파이썬 - 리스트 정렬 예제( 정렬 및 역정렬, key 와 람다식 활용한 조건 정렬)

by ggyongi 2021. 3. 27.
반응형

코딩테스트에서 정렬은 매우 중요하다. 적재적소에 정렬을 사용하면 문제를 더욱 쉽게 풀 수 있다. 

따라서 정렬에 관한 모든 내용을 적어보겠다.

 

<정렬 기본 메소드>

- 정렬은 기본적으로 파이썬에서 제공하는 .sort( )와 sorted( )로 가능하다.

- .sort( )는 해당 리스트 자체를 바꿔버린다. sorted( )는 정렬된 리스트를 새로 반환한다. 이게 차이점.

- 이때 정렬 순서는 문자열의 경우 알파벳순, 숫자의 경우 오름차순이다.

- 파라미터 reverse=True를 설정하면 역순 정렬이 가능해진다.

>>a = [1,3,5,4,2,7]
>>sorted(a)
[1,2,3,4,5,7]

>>sorted(a, reverse = True)
[7,5,4,3,2,1]


>>b= ['c', 'd','a' ,'b']
>>b.sort()
>>b
['a','b','c','d']

>>b.sort(reverse = True)
>>b
['d','c','b','a']

 

<숫자 문자열의 정렬>

원래의 정렬은 리스트에 숫자와 알파벳이 섞여있을 시 에러가 발생한다.

그러나, 알파벳과 숫자가 섞여있을때 숫자에 작은 따옴표를 씌워 문자화하면 함께 정렬이 가능해진다.

결국 다 문자가 되었으니 당연한 소리다. 

>> a= ['30','301','3','31','34','4','b','a','aa','ba']
>> sorted(a)
['3','30','301','31','34','4','a','aa','b','ba']

 그런데 이때 정렬 순서에 주목해야 한다. 문자열이기 때문에 숫자 크기가 아닌 문자열 순서로 정렬이 된다.

따라서 '301'가 '31'보다 앞에 오게 된다.

 

 

<정렬의 key 파라미터>

- key 값에 여러 조건을 설정할 수 있다.

- 람다식도 키값으로 활용이 가능하며, 이때 x는 각 리스트의 element를 의미한다.

- 람다식의 리턴값에 -을 붙이면 역순 정렬이 가능하다.

- 조건이 여러개 필요할 시에는 ( x[0], x[1] )과 같이 튜플로 표현해주면 된다.

# order by length of string
>> a = ['hello', 'hell','he']
>> sorted(a, key =len)
['he','hell','hello']


# ordered by using lambda function
>> a = ['b1','d2','a5','e3','c4']
>> sorted(a, key = lambda x:x[0])
['a5','b1','c4','d2','e3']  # ordered by alphabet

>>sorted(a, key = lambda x:x[1])
['b1','d2','e3','c4','a5']   # ordered by ascending number

>>sorted(a, key = lambda x:-x[1])
['a5','c4','e3','d2','b1']   # ordered by descending number


# sorted by two options
>> b = ['b3','a1','b5','c3','a7','c6']
>> sorted(b, key = lambda x: (x[0],x[1]))
['a1','a7','b3','b5','c3','c6']

 

 

<정렬과 문자열 조인 기능 활용 - 문자열 재정렬>

>> a = 'ecbda'
>> b = ''.join(sorted(a))
>> b
'abcde'
 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글