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

๐Ÿ Python/python-programming

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

Hello๐Ÿ‘‹ I'm Dona!:)

์ง€๋‚œ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

sort์™€ sorted์˜ documentation ์†Œ๊ฐœ๋Š” ์ง€๋‚œ ํฌ์ŠคํŒ… ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”! โฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธโฌ‡๏ธ

https://imdona.tistory.com/12

 

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

Hello, I'm Dona!:) ์•„์ง ๋ถ€์กฑํ•˜์ง€๋งŒ, ์–ด๋Š๋ง ํŒŒ์ด์ฌ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•œ ์ง€ ๋ฐ˜๋…„์ด ๋‹ค ๋˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋ ˆ๋ฒจ์ด ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ๊ธฐ์ดˆ์ ์ธ ๋ถ€๋ถ„์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์ด ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์„ ์ฒ˜

imdona.tistory.com


๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ์˜ˆ์‹œ๋กœ ๋ฐฐ์›Œ๋ด…์‹œ๋‹ค!

๋ฐฑ์ค€ 1181๋ฒˆ [๋‹จ์–ด ์ •๋ ฌ]

๋ฌธ์ œ

์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ N๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
1. ๊ธธ์ด๊ฐ€ ์งง์€ ๊ฒƒ๋ถ€ํ„ฐ
2. ๊ธธ์ด๊ฐ€ ๊ฐ™์œผ๋ฉด ์‚ฌ์ „ ์ˆœ์œผ๋กœ

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 20,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹จ์–ด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 50์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜์—ฌ ๋‹จ์–ด๋“ค์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹จ, ๊ฐ™์€ ๋‹จ์–ด๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ์—๋Š” ํ•œ ๋ฒˆ์”ฉ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ๋˜๋Š” ์˜ˆ์ œ

13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours

๋ฌธ์ œ๋ฅผ ๋ณด์‹œ๋ฉด ์ •๋ ฌ์˜ ๊ธฐ์ค€์ด ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

1. ๊ธธ์ด

2. ์‚ฌ์ „ ์ˆœ

 

๋ฌผ๋ก  ์•„๋ž˜์™€ ๊ฐ™์ด "key=len" ์ด๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ ๋„ฃ์–ด์ฃผ์–ด๋„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, ์˜ค๋Š˜ ๋ฐฐ์šธ ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ๋กœ๋„ ์ ์šฉํ•ด์„œ ํ’€์–ด๋ณผ๊ป˜์š”!

'''์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•
-> sort(key=len) : ๊ธธ์ด ์ˆœ์œผ๋กœ ์ •๋ ฌ
sort(key=func) : func๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์„ ์ทจํ•˜๊ณ  ์ •๋ ฌ์„ ์•ˆ๋‚ดํ•˜๋Š” ํ”„๋ก์‹œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜'''

N = int(input())
word_list = [input() for _ in range(N)]
word_list = sorted(list(set(word_list))) # ์ค‘๋ณต ์ œ๊ฑฐ
word_list.sort(key=len) # str ๊ธธ์ด ์ˆœ ์ •๋ ฌ
for word in word_list:
    print(word)

๋‘ ์กฐ๊ฑด์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ (word, len(word))๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ํŠœํ”Œ์„ ๋งŒ๋“ค์—ˆ์–ด์š”! 

๊ทธ๋ฆฌ๊ณ  key ์กฐ๊ฑด์— ํ•จ์ˆ˜๋กœ lamda๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ   ๊ธธ์ด ์ˆœ์ธ x[1] -> ์‚ฌ์ „์ˆœ์ธ x[0] ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•ด์ค๋‹ˆ๋‹ค!

(์—ฌ๊ธฐ์„œ x๋Š” ํ•˜๋‚˜์˜ ํŠœํ”Œ์„ ์˜ˆ๋กœ ๋“ค๋ฉด, ('word', 4) ๋ผ๋Š” ํŠœํ”Œ์—์„œ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๊ฐ€ 0๋ฒˆ์ด ๋‹จ์–ด์ด๊ณ  1๋ฒˆ์ด ๊ธธ์ด๊ฒ ์ฃ !)

๊ฒฐ๋ก ์€ lambda ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์›ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ์ˆœ์„œ๋กœ ๋‹ค์ค‘ ์กฐ๊ฑด ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹คโ˜บ๏ธ 

'''๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•
1. word, word์˜ ๊ธธ์ด์ธ ํŠœํ”Œ์„ ์›์†Œ๋กœ ๊ฐ–๋Š” ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค
2. ์ •๋ ฌ ๋ฉ”์†Œ๋“œ์ธ sort์— key optional parameter ์‚ฌ์šฉ(๊ธธ์ด(x[1]) -> ์•ŒํŒŒ๋ฒณ ์ˆœ(x[0]) ์ •๋ ฌ)'''
N = int(input())
word_list = []
for i in range(N):
    word = str(input())
    word_list.append((word, len(word))) # word, word์˜ ๊ธธ์ด์ธ ํŠœํ”Œ์„ ์›์†Œ๋กœ ๊ฐ–๋Š” ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค
word_list = list(set(word_list))
word_list.sort(key = lambda x: (x[1], x[0])) 
# ์ •๋ ฌ ๋ฉ”์†Œ๋“œ์ธ sort์— key optional parameter ์‚ฌ์šฉ(๊ธธ์ด(x[1]) -> ์•ŒํŒŒ๋ฒณ ์ˆœ(x[0]) ์ •๋ ฌ)
for i in word_list:
    print(i[0])

์„ธ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์ œ๊ฐ€ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ๋’ค๋Šฆ๊ฒŒ ์ƒ๊ฐ์ด ๋‚œ ๋ฐฉ๋ฒ•์ธ๋ฐ, ํŠœํ”Œ์˜ ์ˆœ์„œ๋ฅผ len, word ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๋ฉด lambda ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ •๋ ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

'''์„ธ๋ฒˆ์งธ ๋ฐฉ๋ฒ•
-> ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์—์„œ ํŠœํ”Œ์˜ ์ˆœ์„œ๋ฅผ len, word ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๋ฉด lambda ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ •๋ ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค'''
N = int(input())
word_list = []
for i in range(N):
    word = str(input())
    word_list.append((len(word), word)) # len, word์ธ ํŠœํ”Œ์„ ์›์†Œ๋กœ ๊ฐ–๋Š” ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค
word_list = list(set(word_list))
word_list.sort() # ํŠœํ”Œ์˜ ์ฒซ๋ฒˆ์งธ ๊ฐ’์ธ len๋จผ์ € ์ •๋ ฌ -> word ๋‹ค์Œ์œผ๋กœ ์•Œ์•„์„œ ์ •๋ ฌํ•จ!
for word_len, word in word_list:
    print(word)

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ง๊ณ  ์˜ˆ์‹œ๋กœ๋„ ํ•œ๋ฒˆ ๋งŒ๋‚˜๋ณผ๊นŒ์š”?! (์•„๋ž˜ REFERENCE ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค โ˜บ๏ธ)

(์ด๋ฆ„ , ๋‚˜์ด , ์žฌ์‚ฐ) ์œผ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

์•„๋ž˜์˜ ๋‹ค์ค‘ ์กฐ๊ฑด์œผ๋กœ ์ •๋ ฌ์„ ํ•ด๋ด…์‹œ๋‹ค!

1. ๋‚˜์ด ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ

2. ๊ฐ™์€ ๋‚˜์ด๋ผ๋ฉด ์žฌ์‚ฐ์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ

# (<์ด๋ฆ„> , <๋‚˜์ด> , <์žฌ์‚ฐ>)
array = [("Dona", 27, 300) , ("Mr.Salmon", 27, 10000), ("KingHee", 20, 200000),("Seoki",13,5000000), ("Teco", 70, 5000000)]

array.sort(key = lambda x: (x[1], -x[2]))
print(array)

# print out : [('Seoki', 13, 5000000), ('KingHee', 20, 200000), ('Mr.Salmon', 27, 10000), ('Dona', 27, 300), ('Teco', 70, 5000000)]

1. ๋‚˜์ด ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ -> ํŠœํ”Œ์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ 1(๋‚˜์ด), +(์˜ค๋ฆ„์ฐจ์ˆœ)

2. ๊ฐ™์€ ๋‚˜์ด๋ผ๋ฉด ์žฌ์‚ฐ์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ -> ํŠœํ”Œ์˜ ์ธ๋ฑ์Šค๋ฒˆํ˜ธ2(์žฌ์‚ฐ), -(๋‚ด๋ฆผ์ฐจ์ˆœ)


์ด์ƒ์œผ๋กœ ํฌ์ŠคํŒ…์„ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š” :) GO FOR IT!! BYE!! ๐Ÿ‘‹


REFERENCE