Hello, I'm Dona!:)
์์ง ๋ถ์กฑํ์ง๋ง, ์ด๋๋ง ํ์ด์ฌ ๊ณต๋ถ๋ฅผ ์์ํ ์ง ๋ฐ๋ ์ด ๋ค ๋์ด๊ฐ๋๋ค.
๋ ๋ฒจ์ด ์ฌ๋ผ๊ฐ์๋ก ๊ธฐ์ด์ ์ธ ๋ถ๋ถ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ด ๋์จ๋ค๋ ๊ฒ์ ๋๋ผ๊ณ ์์ต๋๋ค.
ํ์ด์ฌ์ ์ฒ์ ๋ฐฐ์ ์ ๋ ์ด์ฌ์ ์๊ฐํ๋ฉฐ, ์ ๋ง์ basic series๋ฅผ ์์ํ๋ ค๊ณ ํฉ๋๋ค!
์์๋ ๋ค์ฃฝ๋ฐ์ฃฝ ์ผ ์๋ ์์ง๋ง, ์ต๋ํ sortingํด์ ์ฐ์ฌํ๋ ค๊ณ ํฉ๋๋ค.โบ๏ธ
๋ธ๋ก๊น ์ ํ๋ฉด์ ์ ์ค์ค๋ก๋ ๋ง์ด ์ ๋ฆฌ๊ฐ ๋๊ณ , ๋จ๋ค์๊ฒ ๋์์ด ๋ ์ ์๋ค๋ ์ฌ์ค์ ์ ๋ฅผ ํ๋ณตํ๊ฒ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๐๐ฆ
์๋ก ์ด ๊ธธ์์ต๋๋ค. ์ค๋์ list ๋ฉ์๋์ธ sort์ sorted์ ๋ํด ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค!
list.sort( )
sort(*, key=None, reverse=False)
1. ๊ธฐ์กด ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๊ณ , return๊ฐ์ด ์์ต๋๋ค. -> ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ์ถ์ผ๋ฉด print ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ณผ ์ ์์ต๋๋ค.
2. python์์ ์ ๊ณตํ๋ list documentation์ ํ๋์ฉ ์ค๋ช ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
1) *
: ํค์๋-์ ์ฉ (keyword-only) ์ธ์๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์ฝ๊ฒ ์ค๋ช
๋๋ฆฌ๋ฉด, * ๋ค์ ๋์ค๋ ์ธ์๋ ํค์๋ ์ ์ฉ์ผ๋ก ์ ๋ฌ๋ผ์ผ ํด์!
sort ๋ฉ์๋์์๋ * ๋ค์์ ๋์จ ์ธ์์ธ key์ reverse๋ฅผ ์ธ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, key = , reverse = ์ด๋ฐ ์์ผ๋ก ํค์๋๋ฅผ ์ธ๊ธํด์ผ ํ๋ค๋ ์๋ฏธ์์! ๋ฐ์์ ์ฝ๋๋ก ๊ฐ์ด ํ์ธํด ๋ณผ๊ป์!
2) key = None
: ์ธ์๋ก ์ ๋ ฌ์ ์๋ดํ๋ ํจ์๋ฅผ ๋ฐ์ต๋๋ค. ์กฐ๊ธ ์ฌํ ๊ฐ๋
์ ์ถ๊ฐํ๋ฉด ์ด ํจ์๋ 1๊ฐ์ ๊ฐ์ ์ทจํ๊ณ 1๊ฐ์
๊ฐ์ ๋ฐํํ๊ณ ๋ฐํ๋ "ํ๋ก์" ๊ฐ์ด ์ ๋ ฌ ๋ด์ ๋น๊ต์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ์๋ฉด ๋์์ด ๋ ๊ฑฐ์์!
[key์ ์ข ๋ฅ]
- default(None) : ๋ณ๋์ ํค๊ฐ ๊ณ์ฐํ์ง ์๊ณ ์ ๋ ฌ
- len : ๋ฌธ์์ด ๋ฆฌ์คํธ์์ ๊ฐ์ฅ ์งง์ ๊ฒ๋ถํฐ ๊ธด ๊ฒ๊น์ง ๊ธธ์ด๋ณ๋ก ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌ
- str.lower : ๋ฌธ์์ด ๋ฆฌ์คํธ์์ ๋๋ฌธ์์ ์๋ฌธ์๋ฅผ ๋์ผํ๊ฒ ์ฒ๋ฆฌํ์ฌ ์ ๋ ฌ
3) reverse = Flase
: True or Flase๋ง ๋ฐ๋ ์ธ์์
๋๋ค.
- Flase(default) : ์ค๋ฆ์ฐจ์
- True : ๋ด๋ฆผ์ฐจ์
sorted( list )
sorted(iterable, *, key=None, reverse=False)
1. ์ธ์๋ก ๋ฐ์ iterable
์ ํญ๋ชฉ๋ค๋ก ์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋๋ ค์ค๋๋ค. ์ฆ, ์๋ณธ list๋ ๋ณํ์ง ์์ต๋๋ค!
2. documentation์ ํ๋์ฉ ์ค๋ช
1) iterable
: ์ฌ์ ์ ์๋ฏธ๋ก๋ "๋ฐ๋ณต๊ฐ๋ฅํ" ์ด๋ผ๋ ๋ป์ผ๋ก, ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ์์๋ค์ ์ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋
์๋ฃํ๋ค์ ๋๋ค. ๋ํ ๊ฐ ์์์ ๋ฐ์ดํฐ ํ์ ์ด ์์ ๋ก์, ํ๋์ List์ ์ ์, ์ค์, ๋ฌธ์์ด ๋ฑ์ด ํจ๊ป ๋ค์ด๊ฐ ์
์์ต๋๋ค. List, Tuple, Dictionary, Set ์๋ฃํ์ผ๋ก ๋ถ๋ฅ๋ฉ๋๋ค.
2) ๋๋จธ์ง๋ ์์ ์ค๋ช ๊ณผ ๋์ผ
์ฝ๋๋ก ์ค์ตํ๋ฉด์ ์ถ๊ฐ์ ์ธ ์ค๋ช ์ ํด๋๋ฆฌ๊ฒ ์ต๋๋ค!
test = [2, 4, 1, 3]
test.sort() # print ๋๋ ๊ฐ ์์ด ์๋ณธ list ์ ๋ ฌ
# ๋ณด๊ณ ์ถ์ผ๋ฉด print
print(test) # test = [1, 2, 3, 4]
sort()ํจ์๋ return ๊ฐ์ด ์๊ณ , ์๋ณธ list ์์ฒด๋ฅผ ์ ๋ ฌํ๊ธฐ ๋๋ฌธ์, ๋ณํ list๋ฅผ ๋ณด๊ณ ์ถ์ผ๋ฉด print ํจ์๋ฅผ ์ด์ฉํด์ผ ์ถ๋ ฅํด์ฃผ์ด์ผ ํด์!
test = [2, 4, 1, 3]
sorted(test) # [1, 2, 3, 4] ๋ฐ๋ก ์ถ๋ ฅ
print(test) # [2, 4, 1, 3] -> ์๋ณธ list๋ ๊ทธ๋๋ก
sorted()ํจ์๋ ์๋ณธ list๋ ๋ณด์กดํ๊ณ ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํด์ค๋๋ค! ๊ฐ๊ฐ ์ํฉ์ ๋ง์ถ์ด ์ฌ์ฉํ๋ฉด ๋๊ฒ ์ต๋๋ค. :)
์ด๋ฒ์๋ int๊ฐ ์๋ ๋ฌธ์์ด ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด๋ณผ๊ฒ์!
str_list = ['ccc', 'aaaa', 'd', 'bb']
sorted(str_list, key=len) # ['d', 'bb', 'ccc', 'aaaa']
key = len
์ด๋ผ๋ ์ธ์๋ฅผ ํตํด ๋ฌธ์์ด์ ๊ธธ์ด์ ๋ง๊ฒ ์๋ก์ด ๋ฆฌ์คํธ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
## example 1
strs = ['NO', 'Dona','zoo', 'apple']
sorted(strs, key=str.lower)
# print : ['apple', 'Dona', 'NO', 'zoo']
## example 2
sorted("This is a test string from Andrew".split(), key=str.lower)
# print : ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
key = str.lower
์ด๋ผ๋ ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด, ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง์๊ณ ์ํ๋ฒณ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
* : ํค์๋-์ ์ฉ (keyword-only) ์ธ์
## example 1
def keyword(a, *, b, c): print(a, b, c)
keyword(1, c=2, b=3) # print : 1 3 2
keyword(1, 2, 3)
## error!!!!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: keyword() takes 1 positional argument but 3 were given
## example 2
strs = ['NO', 'Dona','zoo', 'apple']
sorted(strs, str.lower)
## error!!!!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sorted expected 1 argument, got 2
## good
sorted(strs, key=str.lower)
# print : ['apple', 'Dona', 'NO', 'zoo']
ํค์๋ ์ ์ฉ ์ธ์๋ key = something
์ด๋ ๊ฒ ๊ผญ ์์ ์ด๋ค ์ธ์์ธ์ง ์ค๋ช
์ ํด์ฃผ์ด์ผ ํฉ๋๋ค!
์์1์ ๋ณด๋ฉด b, c๋ ์์น๋ ์๊ด์์ง๋ง, b = 3
, c = 2
์ด๋ ๊ฒ ์ด๋ค ์ธ์์ธ์ง ์ค๋ช
์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ์ ํด์ฃผ๋ฉด error!!!
์ค๋ ๋ฐฐ์ด sorted ํจ์๋ key๊ฐ ํค์๋ ์ ์ฉ ์ธ์์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ค๋ช ์์ด ๊ฐ๋ง ํญ ์ฃผ๋ฉด error๊ฐ ๋ฉ๋๋ค!
์ ๋ ์ค๋ ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ list ์์ key๋ผ๋ ์ธ์๋ฅผ ๋ฃ์ด์ค ์ ์๋ค๋ ์ฌ์ค์ ์ฒ์ ์์๋๋ฐ ์ ๋ง ์ฌ๋ฏธ์์์ต๋๋ค:)
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ ํ์ฉ๋๋ list ์ ๋ ฌ์ด ๊ถ๊ธํ์๋ค๋ฉด ํ์๋ค๋ฉด ์๋ REFERENCE์ ์ ์ GitHub daily-commit repository๋ก ์์ฃผ์ธ์! ๊ฐ์ฌํฉ๋๋ค. ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์ :) GO FOR IT!! BYE!! ๐
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์ ํ์ฉ๋๋ list ๋ค์ค ์กฐ๊ฑด ์ ๋ ฌ ํฌ์คํ ์ถ๊ฐ ํ์ต๋๋ค โฌ๏ธ โบ๏ธ
REFERENCE
- Google for Education : https://developers.google.com/edu/python/sorting
- Python Documentation(English) : https://docs.python.org/3/library/stdtypes.html?highlight=list sort#list.sort
- Python Documentation(ํ๊ตญ์ด) : https://docs.python.org/ko/3/library/stdtypes.html?highlight=list sort#list.sort
- Python Documentation(key ํจ์) : https://docs.python.org/ko/3/howto/sorting.html
- Python Documentation(ํค์๋ ์ ์ฉ ์ธ์) : https://docs.python.org/ko/3/glossary.html#keyword-only-parameter
- ํค์๋ ์ ์ฉ ์ธ์ ๋ธ๋ก๊ทธ ์ฐธ๊ณ : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jodi999&logNo=221492571718
- Iterable ์๋ฃํ : https://planbs.tistory.com/entry/Python-Iterable-์๋ฃํ-List-Tuple
- GitHub repository : https://github.com/imdona/daily-commit