๐Ÿ”ฌ Explore/ํŒŒ์ด์ฌ์„ ํŒŒ์ด์ฌ๋‹ต๊ฒŒ

[ํŒŒ์ด์ฌ์„ ํŒŒ์ด์ฌ๋‹ต๊ฒŒ] Part 04. Iterable ๋‹ค๋ฃจ๊ธฐ (Programmers)

devCloud 2023. 10. 17. 05:45
728x90

๐Ÿ—’ ๊ฐ•์˜๋…ธํŠธ ๐Ÿ—’

  • sort() : ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ์›๋ณธ์˜ ๋ฉค๋ฒ„ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์›๋ณธ์˜ ์ˆœ์„œ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ์ •๋ ฌ๋œ ๊ฐ’์„ ๊ตฌํ•˜๋ ค๋ฉด sort ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • sorted() : ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ iterableํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•ด ์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค.

 

sort ์˜ˆ์‹œ

list1 = [3, 2, 5, 1]
list2 = [i for i in list1] # ๋˜๋Š” copy.deepcopy๋ฅผ ์‚ฌ์šฉ
list2.sort()

sorted ์˜ˆ์‹œ

list1 = [3, 2, 5, 1]
list2 = sorted(list1)

โ˜ ๋ฌธ์ œ 1 [ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ ๋’ค์ง‘๊ธฐ ]

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋‹ค์Œ์„ ๋งŒ์กฑํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

  • solution ํ•จ์ˆ˜๋Š” ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ, mylist๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค
  • solution ํ•จ์ˆ˜๋Š” mylist ์›์†Œ์˜ ํ–‰๊ณผ ์—ด์„ ๋’ค์ง‘์€ ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด mylist [[1, 2, 3], [4, 5, 6], [7, 8, 9]]๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ, solution ํ•จ์ˆ˜๋Š” [[1, 4, 7], [2, 5, 8], [3, 6, 9]] ์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ œํ•œ ์กฐ๊ฑด

  • mylist์˜ ์›์†Œ์˜ ๊ธธ์ด๋Š” ๋ชจ๋‘ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • mylist์˜ ๊ธธ์ด๋Š” mylist[0]์˜ ๊ธธ์ด์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋Š” 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

โ˜‘ Solution

def solution(mylist):
    answer = [[] * len(mylist) for _ in range(len(mylist))]
    for i in range(len(mylist)):
        for j in range(len(mylist[i])):
            answer[i].append(mylist[j][i])
    return answer

๊ณ„์† ํ‹€๋ฆฌ๋Š” ๋ฐ”๋žŒ์— ๊ฐ•์˜๋…ธํŠธ๋ฅผ ๋ณด๊ณ  ํ’€์—ˆ๋‹ค. ๋ณดํ†ต์€ 2์ค‘ for๋ฌธ์„ ์ด์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ answer = [[ ]] ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋ฉด out of range ์˜ค๋ฅ˜๊ฐ€ ๋– ์„œ ์ž…๋ ฅ๊ฐ’์— ๋งž๊ฒŒ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ผœ์ค˜์•ผ ํ•œ๋‹ค.

 

โœ” Feedback โœ”

def solution(mylist):
    return list(map(list, zip(*mylist)))
  • zip(*iterables) : ๊ฐ iterables ์˜ ์š”์†Œ๋“ค์„ ๋ชจ์œผ๋Š” iterator๋ฅผ ๋งŒ๋“ ๋‹ค.
    ํŠœํ”Œ์˜ iterator๋ฅผ ๋Œ๋ ค์ฃผ๋Š”๋ฐ, i ๋ฒˆ์งธ ํŠœํ”Œ์€ ๊ฐ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ์‹œํ€€์Šค๋‚˜ ์ดํ„ฐ๋Ÿฌ๋ธ”์˜ i ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ(iterable) ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ณ , ๊ฐ ๊ฐ์ฒด๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” ์›์†Œ๋ฅผ ํ„ฐํ”Œ์˜ ํ˜•ํƒœ๋กœ ์ฐจ๋ก€๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ณต์ž(iterator)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์˜ˆ์‹œ 1

mylist = [1, 2, 3]
new_list = [40, 50, 60]
for i in zip(mylist, new_list):
    print (i) #(1, 40) (2, 50) (3, 60)

 

 

์˜ˆ์‹œ 2

list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for number1, number2, number3 in zip(list1, list2, list3):
   print(number1 + number2 + number3)

 

์˜ˆ์‹œ 3 (Key ๋ฆฌ์ŠคํŠธ์™€ Value ๋ฆฌ์ŠคํŠธ๋กœ ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑํ•˜๊ธฐ)

animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}

ํŒŒ์ด์ฌ์˜ zip ํ•จ์ˆ˜์™€ dict ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜๋ฉด ์ฝ”๋“œ ๋‹จ ํ•œ ์ค„๋กœ, ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉ์ณ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


โ˜ ๋ฌธ์ œ 2 [ i๋ฒˆ์งธ ์›์†Œ์™€ i+1๋ฒˆ์งธ ์›์†Œ ]

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

์ˆซ์ž๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ mylist๊ฐ€ solution ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. solution ํ•จ์ˆ˜๊ฐ€ mylist์˜ i๋ฒˆ์งธ ์›์†Œ์™€ i+1๋ฒˆ์งธ ์›์†Œ์˜ ์ฐจ๋ฅผ ๋‹ด์€ ์ผ์ฐจ์› ๋ฆฌ์ŠคํŠธ์— ์ฐจ๋ก€๋กœ ๋‹ด์•„ ๋ฆฌํ„ดํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๋‹จ, ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ์›์†Œ๋Š” (๋งˆ์ง€๋ง‰+1)๋ฒˆ์งธ์˜ ์›์†Œ์™€์˜ ์ฐจ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†์œผ๋‹ˆ, ์ด ๊ฐ’์€ ๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์ œํ•œ ์กฐ๊ฑด

  • mylist์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • mylist์˜ ์›์†Œ๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

  • 83๊ณผ 48์˜ ์ฐจ๋Š” 35์ž…๋‹ˆ๋‹ค.
  • 48๊ณผ 13์˜ ์ฐจ๋Š” 35์ž…๋‹ˆ๋‹ค.
  • 13๊ณผ 4์˜ ์ฐจ๋Š” 9์ž…๋‹ˆ๋‹ค.
  • 4์™€ 71์˜ ์ฐจ๋Š” 67์ž…๋‹ˆ๋‹ค.
  • 71๊ณผ 11์˜ ์ฐจ๋Š” 60์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ [35, 35, 9, 67, 60]๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

 

โ˜‘ Solution

def solution(mylist):
    for i in range(1,len(mylist)):
        mylist[i-1] -= mylist[i]
        if i == len(mylist)-1:
            mylist.pop(i)
    return list(map(abs,mylist))

๋ณดํ†ต์€ len๊ณผ index๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ ์›์†Œ์— ์ ‘๊ทผํ•œ๋‹ค. ๋ฆฌ์ŠคํŠธ์—์„œ ๋‘ ๊ฐœ์”ฉ ๊บผ๋‚ด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์ž˜ ์•ˆ ๋๋‹ค.

 

โœ” Feedback โœ”

def solution(mylist):
    answer = []
    for a, b in zip(mylist, mylist[1:]):
        answer.append(abs(a-b))
    return answer
  • ํŒŒ์ด์ฌ์˜ zip์„ ์ด์šฉํ•˜๋ฉด index๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ ์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฃผ์˜ํ•  ์  : zip ํ•จ์ˆ˜์— ์„œ๋กœ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅธ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ธ์ž๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ธธ์ด๊ฐ€ ์งง์€ ์ชฝ ๊นŒ์ง€๋งŒ ์ดํ„ฐ๋ ˆ์ด์…˜์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ ˆํผ๋Ÿฐ์Šค - zip ์ฐธ๊ณ 

โ˜ ๋ฌธ์ œ 3 [ ๋ชจ๋“  ๋ฉค๋ฒ„์˜ type ๋ณ€ํ™˜ํ•˜๊ธฐ ]

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋ฌธ์ž์—ด ๋ฆฌ์ŠคํŠธ mylist๋ฅผ ์ž…๋ ฅ๋ฐ›์•„, ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •์ˆ˜ํ˜• ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”๊พผ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด mylist๊ฐ€ ['1', '100', '33'] ์ธ ๊ฒฝ์šฐ, solution ํ•จ์ˆ˜๋Š” [1, 100, 33] ์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ œํ•œ ์กฐ๊ฑด

  • mylist์˜ ๊ธธ์ด๋Š” 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • mylist์˜ ์›์†Œ๋Š” 10์ง„์ˆ˜ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์ฆ‰, 'as2' ์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

 

โ˜‘ Solution 1

def solution(mylist):
    return list(map(int, mylist))

โ˜‘ Solution 2

def solution(mylist):
    return [int(i) for i in mylist]
  • map(function, iterable) : Iterable์˜ ๋ชจ๋“  ๋ฉค๋ฒ„์˜ type์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฒ˜์Œ์—” mapํ•จ์ˆ˜๋ฅผ ์จ์„œ ํ’€์—ˆ๊ณ , ๋‘ ๋ฒˆ์งธ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ํ’€์—ˆ๋‹ค. ๊ฐ•์˜๋…ธํŠธ์—์„œ๋Š” mapํ•จ์ˆ˜๋ฅผ ์ถ”์ฒœํ–ˆ๋‹ค.


 

โ˜ ๋ฌธ์ œ 4 [ map ํ•จ์ˆ˜ ์‘์šฉํ•˜๊ธฐ ]

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

์ œํ•œ ์กฐ๊ฑด

  • mylist์˜ ๊ธธ์ด๋Š” 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • mylist ๊ฐ ์›์†Œ์˜ ๊ธธ์ด๋Š” 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

 

โ˜‘ Solution

def solution(mylist):
    answer = list(map(len, mylist))
    return answer

๋ˆ„๊ตฐ๊ฐ€ len์— ๊ด€ํ•ด ์งˆ๋ฌธ์„ ํ–ˆ๋Š”๋ฐ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋ผ์„œ ์ ์–ด๋ณธ๋‹ค.

map์€ ๋‘๋ฒˆ์งธ ์ธ์ž์˜ ๊ฐ ์›์†Œ์— ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ๋“ค์–ด์˜จ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด์ค๋‹ˆ๋‹ค.

•  ํ•จ์ˆ˜๋’ค์— ()๋ฅผ ๋ถ™์ด๋ฉด, ์ด๋Š” ๋” ์ด์ƒ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ดํ•œ ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.์ฆ‰,
•  len -> ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•จlen() -> ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ›์€ ๋ฆฌํ„ด๊ฐ’์„ ์˜๋ฏธํ•จ

 

728x90