list.sort()
와 sorted()
의 차이, key 인자 활용¶
1. list.sort()
¶
- 원본 리스트의 순서를 변경함
- 리스트에만 사용 가능
- 리스트 내부에 길이를 가진 객체가 있으면(리스트, 튜플, 문자열 등) 앞의 원소부터 순서대로 비교해 정렬
In [12]:
# 원본 리스트의 순서를 변경
x = [6, 0, -8, 2]
x.sort()
print(x)
[-8, 0, 2, 6]
In [11]:
# 리스트가 아닌 객체에는 사용 불가능
x = (6, 0, -8, 2)
x.sort()
print(x)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In [11], line 3
1 # 리스트가 아닌 객체에는 사용 불가능
2 x = (6, 0, -8, 2)
----> 3 x.sort()
4 print(x)
AttributeError: 'tuple' object has no attribute 'sort'
In [35]:
# 앞에서부터 비교해서 정렬
x = [(0, 3), (-3, 8), (2, -10, 6)]
x.sort()
print(x)
[(-3, 8), (0, 3), (2, -10, 6)]
In [31]:
# 자료형이 다르면 정렬 불가
x = [(0, 3), [-3, 8], (2, -10, 6)]
x.sort()
print(x)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In [31], line 2
1 x = [(0, 3), [-3, 8], (2, -10, 6)]
----> 2 x.sort()
3 print(x)
TypeError: '<' not supported between instances of 'list' and 'tuple'
In [40]:
# 제일 앞의 원소부터 순서대로 비교해 정렬
x = [(0, 3), (-2, 8), (0, -10, 6)]
x.sort()
print(x)
[(-2, 8), (0, -10, 6), (0, 3)]
In [41]:
x = ['z', 'aba', 'aa', 'ab']
x.sort()
print(x)
['aa', 'ab', 'aba', 'z']
2. sorted()
¶
- 원본 객체는 건드리지 않고 정렬 결과만 보여줌
- 리스트가 아닌 객체에도 사용 가능 (정렬 결과 리스트로 반환)
- 리스트 내부에 길이를 가진 객체가 있으면
list.sort()
와 같음
In [16]:
y = [6, 0, -8, 2]
sorted(y)
Out[16]:
[-8, 0, 2, 6]
In [18]:
# 원본에는 영향 없음
print(y)
[6, 0, -8, 2]
In [14]:
# 리스트가 아닌 다른 객체에 사용시 정렬 결과를 리스트로 반환
y = (6, 0, -8, 2)
sorted(y)
Out[14]:
[-8, 0, 2, 6]
In [15]:
y = {6, 0, -8, 2}
sorted(y)
Out[15]:
[-8, 0, 2, 6]
In [44]:
# 딕셔너리는 key를 기준으로 정렬
y = {'c' : 100, 'a' : 300, 'b' : 0}
sorted(y)
Out[44]:
['a', 'b', 'c']
In [47]:
# 제일 앞의 원소부터 순서대로 비교해 정렬
y = [(0, 3), (-2, 8), (0, -10, 6)]
sorted(y)
Out[47]:
[(-2, 8), (0, -10, 6), (0, 3)]
In [50]:
y = ['z', 'aba', 'aa', 'ab']
sorted(y)
Out[50]:
['aa', 'ab', 'aba', 'z']
In [49]:
# 자료형이 다르면 정렬 불가
y = [(0, 3), (-2, 8), [0, -10, 6]]
sorted(y)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In [49], line 2
1 y = [(0, 3), (-2, 8), [0, -10, 6]]
----> 2 sorted(y)
TypeError: '<' not supported between instances of 'list' and 'tuple'
3. key
인자¶
- 두 메소드 모두 key를 인자로 전달해 무엇을 기준으로 정렬할지 지정할 수 있음
- 이때 함수를 정의해 어떤 값을 key로 전달할지 지정
In [52]:
# 두번째 값을 기준으로 정렬할 때
x = [[0, 3], [4, 1], [1, 5]]
x.sort(key = lambda a : a[1] )
print(x)
[[4, 1], [0, 3], [1, 5]]
In [53]:
# 사용자 정의 함수도 가능
def second(a) :
return a[1]
x = [[0, 3], [4, 1], [1, 5]]
x.sort(key = second)
print(x)
[[4, 1], [0, 3], [1, 5]]
In [75]:
# 합을 기준으로 정렬
y = ([0, 9], [3, 1], [1, 5])
sorted(y, key = sum)
Out[75]:
[[3, 1], [1, 5], [0, 9]]
In [77]:
# 길이를 기준으로 정렬
y = set(('bb', 'c', 'aaa'))
sorted(y, key = len)
Out[77]:
['c', 'bb', 'aaa']
'파이썬 팁' 카테고리의 다른 글
파이썬 표준 라이브러리 itertools 사용하기 (1) (0) | 2022.12.05 |
---|---|
dict 자료형 정렬하기 (0) | 2022.12.05 |
클래스, 메소드 정보 조회하기 (0) | 2022.12.01 |
결측치에 그룹별 최빈값 대입하기 (0) | 2022.11.27 |
zip 함수의 활용 (0) | 2022.11.18 |
댓글