๐Ÿง Programming/Python

Python - ๋‚ด์žฅํ•จ์ˆ˜ (zip)

KR_DEV 2023. 8. 14. 14:12

1) ๋‚ด์žฅ ํ•จ์ˆ˜

 

(1) zip (iterable, iterable, ...)

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

 

[์˜ˆ์‹œ]    
numbers = [1, 2, 3]
letters = [“A”, “B”, “C”]    

for pair in zip(numbers, letters):
    print(pair)

[๊ฒฐ๊ณผ]
>>> (1, 'A')
>>> (2, 'B')
>>> (3, 'C')

→ numbers, letters ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ์š”์†Œ๋ฅผ ๊บผ๋‚ด์–ด ํŠœํ”Œ์˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜

[๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ]
for number, upper, lower in zip("12345", "ABCDE", "abcde"):
    print(number, upper, lower)

→ ์ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ทธ๋ฃน์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฃจํ”„๋ฅผ ํ•œ ๋ฒˆ๋งŒ ๋Œ๋ฉด์„œ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, zip() ํ•จ์ˆ˜๋Š” ๊ฐ€๋ณ€์ธ์ž๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐœ ์ด์ƒ์˜ ์ธ์ž๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.

→ ํŠœํ“ฐ์˜ ์›์†Œ๋ฅผ 3๊ฐœ์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด์„œ for ๋ฌธ์—์„œ ์ธ์ž ํ’€๊ธฐ (UnPacking)์„ ํ•˜์˜€์œผ๋ฉฐ ์ด์™€ ๋น„์Šทํ•œ ๊ฒฝ์šฐ๋กœ๋Š” enumerate() ํ•จ์ˆ˜์ด๋‹ค 


[Unzip]
numbers = (1, 2, 3)
letters = ("A", "B", "C")
pairs = list(zip(numbers, letters))
print(pairs)
>>> [(1, 'A'), (2, 'B'), (3, 'C')]

numbers, letters = zip(*pairs)

→ zip() ํ•จ์ˆ˜๋กœ ์—ฎ์–ด ๋†“์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ํ•ด์ฒด (Unzip)ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋„ ์œ„์ฒ˜๋Ÿผ zip() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

[์‚ฌ์ „ ๋ณ€ํ™˜]
keys = [1, 2, 3]
values = [“A”, “B”, “C”]

dict(zip(keys, values))                    // {1: 'A', 2: 'B', 3: 'C'}

→ dict() ํ•จ์ˆ˜์— ํ‚ค์™€ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํŠœํ”Œ์„ ๋„˜๊ธฐ๋ฉด ์‚ฌ์ „์ด ์ƒ์„ฑ๋˜๋Š” ์›๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๊ฒƒ์ด๋‹ค!

[์ฃผ์˜ ์‚ฌํ•ญ]
numbers = ["1", "2", "3"]
letters = ["A"]
list(zip(numbers, letters))                // [('1', 'A')]

→ zip() ํ•จ์ˆ˜๋กœ ๋„˜๊ธฐ๋Š” ์ธ์ž์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅผ ๋•Œ๋Š” ์ฃผ์˜ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ€์žฅ ์งง์€ ์ธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฎ์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋ฐ˜์‘ํ˜•