๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์–ธ์–ด (C, Python)

[python] zip ํ•จ์ˆ˜, zip ํ•จ์ˆ˜์˜ ์‘์šฉ (feat. ํ–‰๋งŒ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•)

by Seop๐Ÿ˜€ 2022. 7. 6.
๋ฐ˜์‘ํ˜•
 ๋‘๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์„œ๋กœ ๋งž๋ฌผ๋ฆฌ๊ฒŒ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

 

zip ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‘๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งž๋ฌผ๋ฆฌ๊ฒŒํ•œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

a = [0,1,2,3,4,5]
b = ['a','b','c','d','e','f']

print(list(zip(a,b)))

# ์ถœ๋ ฅ : [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f')]

 

 

๋งŒ์•ฝ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ(๊ธธ์ด)๊ฐ€ ๋‹ค๋ฅด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

a = [0,1,2,3,4,5]
b = ['a','b','c']

print(list(zip(a,b)))

# ์ถœ๋ ฅ : [(0, 'a'), (1, 'b'), (2, 'c')]

์œ„์™€ ๊ฐ™์ด ์ตœ์†Œ์˜ ๊ธธ์ด์— ๋งž์ถฐ์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜•์„ฑ๋œ๋‹ค. ์‹ค์ œ๋กœ ai, ๋น…๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ๋“ฑ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์€ zipํ•จ์ˆ˜๋ฅผ ์ž์ฃผ ๋‹ค๋ฃจ์–ด ๋ณด์•˜์„ ๊ฒƒ ์ด๋‹ค. ์‹ค์ œ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ์ข…์ข… ์‚ฌ์šฉ๋œ๋‹ค. 

์ด์ œ zip ํ•จ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž

 

 

- zip() ํ•จ์ˆ˜์˜ ์‘์šฉ

1. 2์ฐจ์› ๋ฆฌ์ŠคํŠธ(ํ–‰๋ ฌ)์˜ ํ–‰๋ถ€๋ถ„๋งŒ ์ถ”์ถœํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์ƒ์„ฑ

# input : 
# 0 5 4 5 4 5 4 
# 4 0 5 1 2 3 4 
# 9 8 0 1 2 3 1 
# 9 9 9 0 9 9 9 
# 1 1 1 1 0 1 1 
# 8 7 6 5 4 0 3 
# 9 1 9 1 9 1 0 

import sys

n = 7
arr = [list(map(int,sys.stdin.readline().split())) for _ in range(n)]
print(list(zip(*arr)))

# *arr : [0, 5, 4, 5, 4, 5, 4] [4, 0, 5, 1, 2, 3, 4] ...... [9, 1, 9, 1, 9, 1, 0]

์ถœ๋ ฅ ํ•ด๋ณด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ํ•œ๋ฒˆ ๋Œ๋ ค๋ณด๊ธธ ์ถ”์ฒœํ•œ๋‹ค. 

์ฐธ๊ณ ๋กœ * ๋Š” asterisk ๋ผ๊ณ  ํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ unpack ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. (๋” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.)

ex) *[[1,2],[3,4],[5,6]] ํ•˜๊ฒŒ ๋˜๋ฉด [1,2]์™€ [3,4]์™€ [5,6]์œผ๋กœ unpack ๋ฉ๋‹ˆ๋‹ค. 

 

์ถœ๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค.

# ์ถœ๋ ฅ :
# [(0, 4, 9, 9, 1, 8, 9), (5, 0, 8, 9, 1, 7, 1), (4, 5, 0, 9, 1, 6, 9), (5, 1, 1, 0, 1, 5, 1), (4, 2, 2, 9, 0, 4, 9), (5, 3, 3, 9, 1, 0, 1), (4, 4, 1, 9, 1, 3, 0)]

 

2. unzip

๋งž๋ฌผ๋ฆฌ๊ฒŒ ๋งŒ๋“ค์–ด๋‘” ๋ฐ์ดํ„ฐ๋ฅผ ์›์ƒ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

a = [0,1,2,3,4,5]
b = ['a','b','c']

c = list(zip(a,b))
print(c)
# ์ถœ๋ ฅ : [(0, 'a'), (1, 'b'), (2, 'c')]


# unzip 
print(list(zip(*c)))
# ์ถœ๋ ฅ : [(0, 1, 2), ('a', 'b', 'c')]

 

๋งž๋ฌผ๋ฆฌ๊ฒŒ ๋งŒ๋“ค์–ด๋‘” ๋ฐ์ดํ„ฐ๋ฅผ ์›์ƒ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

๋Œ“๊ธ€