๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ Python/python-programming

[python] List(1) list sorting : sort & sorted ์†Œ๊ฐœ

Hello, I'm Dona!:)

์•„์ง ๋ถ€์กฑํ•˜์ง€๋งŒ, ์–ด๋Š๋ง ํŒŒ์ด์ฌ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•œ ์ง€ ๋ฐ˜๋…„์ด ๋‹ค ๋˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

๋ ˆ๋ฒจ์ด ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ๊ธฐ์ดˆ์ ์ธ ๋ถ€๋ถ„์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์ด ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ์„ ์ฒ˜์Œ ๋ฐฐ์› ์„ ๋•Œ ์ดˆ์‹ฌ์„ ์ƒ๊ฐํ•˜๋ฉฐ, ์ €๋งŒ์˜ basic series๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

์ˆœ์„œ๋Š” ๋’ค์ฃฝ๋ฐ•์ฃฝ ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ตœ๋Œ€ํ•œ sortingํ•ด์„œ ์—ฐ์žฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.โ˜บ๏ธ

๋ธ”๋กœ๊น…์„ ํ•˜๋ฉด์„œ ์ € ์Šค์Šค๋กœ๋„ ๋งŽ์ด ์ •๋ฆฌ๊ฐ€ ๋˜๊ณ , ๋‚จ๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ €๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐ŸŒˆ๐Ÿฆ„

์„œ๋ก ์ด ๊ธธ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ list ๋ฉ”์†Œ๋“œ์ธ sort์™€ sorted์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!


list.sort( )

sort(*key=Nonereverse=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 : ๋‚ด๋ฆผ์ฐจ์ˆœ

๋ฆฌ์ŠคํŠธ key=len์˜ ์˜ˆ์‹œ ์ด๋ฏธ(์ถœ์ฒ˜๋Š” ์•„๋ž˜)

sorted( list )

sorted(iterable*key=Nonereverse=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 ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ ํฌ์ŠคํŒ… ์ถ”๊ฐ€ ํ–ˆ์Šต๋‹ˆ๋‹ค โฌ‡๏ธ โ˜บ๏ธ

https://imdona.tistory.com/14

 

[python] List(2) list sorting : ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ & ๋ฐฑ์ค€ 1181๋ฒˆ[๋‹จ์–ด ์ •๋ ฌ]

Hello๐Ÿ‘‹ I'm Dona!:) ์ง€๋‚œ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. sort์™€ sorted์˜ documentation ์†Œ๊ฐœ๋Š” ์ง€๋‚œ ํฌ์ŠคํŒ… ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”! โฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡

imdona.tistory.com


REFERENCE