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

Python

[Python] Comprehension (List, Dictionary, Tuple)

๋ฐ˜์‘ํ˜•

๐Ÿ– List Comprehension

 

๐Ÿ‘Œ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑํ•˜๊ธฐ

* 1~10๊นŒ์ง€ ์ •์ˆ˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ 
numbers = []
for n in range(1, 10+1):
	numbers.append(n)   

* ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜(List Comprehension) : ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ปดํ”„๋ฆฌํ—จ์…˜ 
[x for x in range(10)]

 

 

๐Ÿ‘Œ for ๋ฌธ๊ณผ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ ๋น„๊ต

→ ๊ณตํ†ต์  : ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์€ ๋Œ€๊ด„ํ˜ธ([ ]) ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ

→ ์ฐจ์ด์  : ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์€ ๋ฆฌ์ŠคํŠธ ๋‚ด๋ถ€์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

* 1~10๊นŒ์ง€ ์ˆซ์ž ์ค‘ ์ง์ˆ˜๋งŒ ์ˆœ์ฐจ์ ์œผ๋กœ ๋“ค์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑํ•˜๊ธฐ 
* for๋ฌธ
even_numbers = []
for n in range(1, 10+1):
	if n % 2 == 0:
    	even_numbers.append(n)
        
* ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜
[ x for x in range(1, 10+1) if x % 2 == 0 ]

# [์‹คํ–‰ ๊ฒฐ๊ณผ] # [2, 4, 6, 8, 10]
* ์ค‘๋ณต ํ‘œํ˜„ ์˜ˆ์‹œ

* ์ €๋…์œผ๋กœ ๋จน์„ ๋ฉ”๋‰ด ์Œˆ๋ฐฅ, ์น˜ํ‚จ, ํ”ผ์ž ์ค‘ ํ•˜๋‚˜์™€ ํ›„์‹์œผ๋กœ ๋จน์„ ์‚ฌ๊ณผ, ์•„์ด์Šคํฌ๋ฆผ, ์ปคํ”ผ ๋ฅผ
  ์ •ํ• ๋•Œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜
[ (x, y) for x in ['์Œˆ๋ฐฅ', '์น˜ํ‚จ', 'ํ”ผ์ž'] for y in ['์‚ฌ๊ณผ', '์•„์ด์Šคํฌ๋ฆผ', '์ปคํ”ผ'] ]  

# [์‹คํ–‰ ๊ฒฐ๊ณผ] 
# [('์Œˆ๋ฐฅ', '์‚ฌ๊ณผ'), 
# ('์Œˆ๋ฐฅ', '์•„์ด์Šคํฌ๋ฆผ'), 
# ('์Œˆ๋ฐฅ', '์ปคํ”ผ'), 
# ('์น˜ํ‚จ', '์‚ฌ๊ณผ'), 
# ('์น˜ํ‚จ', '์•„์ด์Šคํฌ๋ฆผ'), 
# ('์น˜ํ‚จ', '์ปคํ”ผ'), 
# ('ํ”ผ์ž', '์‚ฌ๊ณผ'), 
# ('ํ”ผ์ž', '์•„์ด์Šคํฌ๋ฆผ'), 
# ('ํ”ผ์ž', '์ปคํ”ผ')]
* ์œ„์˜ ์˜ˆ์‹œ์—์„œ ๋ฐฐ๋‹ฌ์— ๋Œ€ํ•œ ์„ ํƒ์ง€ ์ถ”๊ฐ€  
* for๋ฌธ
for x in ['์Œˆ๋ฐฅ', '์น˜ํ‚จ', 'ํ”ผ์ž']:
	for y in ['์‚ฌ๊ณผ', '์•„์ด์Šคํฌ๋ฆผ', '์ปคํ”ผ']:
    	for z in ['๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '๊ฐ€์„œ ๋จน๊ธฐ']:
        	print(x, z, y)

* ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜
[ (x, y, z) for x in ['์Œˆ๋ฐฅ', '์น˜ํ‚จ', 'ํ”ผ์ž'] for y in ['์‚ฌ๊ณผ', '์•„์ด์Šคํฌ๋ฆผ', '์ปคํ”ผ']
for z in ['๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '๊ฐ€์„œ ๋จน๊ธฐ']]

# [์‹คํ–‰ ๊ฒฐ๊ณผ]
# ['๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '๊ฐ€์„œ ๋จน๊ธฐ']]
# [('์Œˆ๋ฐฅ', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์‚ฌ๊ณผ'),
#  ('์Œˆ๋ฐฅ', '๊ฐ€์„œ ๋จน๊ธฐ', '์‚ฌ๊ณผ'), 
#  ('์Œˆ๋ฐฅ', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์•„์ด์Šคํฌ๋ฆผ'), 
#  ('์Œˆ๋ฐฅ', '๊ฐ€์„œ ๋จน๊ธฐ', '์•„์ด์Šคํฌ๋ฆผ'), 
#  ('์Œˆ๋ฐฅ', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์ปคํ”ผ'), 
#  ('์Œˆ๋ฐฅ', '๊ฐ€์„œ ๋จน๊ธฐ', '์ปคํ”ผ'), 
#  ('์น˜ํ‚จ', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์‚ฌ๊ณผ'), 
#  ('์น˜ํ‚จ', '๊ฐ€์„œ ๋จน๊ธฐ', '์‚ฌ๊ณผ'), 
#  ('์น˜ํ‚จ', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์•„์ด์Šคํฌ๋ฆผ'), 
#  ('์น˜ํ‚จ', '๊ฐ€์„œ ๋จน๊ธฐ', '์•„์ด์Šคํฌ๋ฆผ'), 
#  ('์น˜ํ‚จ', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์ปคํ”ผ'), 
#  ('์น˜ํ‚จ', '๊ฐ€์„œ ๋จน๊ธฐ', '์ปคํ”ผ'), 
#  ('ํ”ผ์ž', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์‚ฌ๊ณผ'),
#  ('ํ”ผ์ž', '๊ฐ€์„œ ๋จน๊ธฐ', '์‚ฌ๊ณผ'), 
#  ('ํ”ผ์ž', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์•„์ด์Šคํฌ๋ฆผ'), 
#  ('ํ”ผ์ž', '๊ฐ€์„œ ๋จน๊ธฐ', '์•„์ด์Šคํฌ๋ฆผ'), 
#  ('ํ”ผ์ž', '๋ฐฐ๋‹ฌ ์‹œํ‚ค๊ธฐ', '์ปคํ”ผ'), 
#  ('ํ”ผ์ž', '๊ฐ€์„œ ๋จน๊ธฐ', '์ปคํ”ผ')]
* ์—ฌ๋Ÿฌ ์กฐ๊ฑด ์„ค์ •ํ•˜๊ธฐ (if๋ฌธ ์ค‘๋ณต)  

** ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ 
[ x for x in range(10) if x < 5 if x % 2 == 0 ]

# [์‹คํ–‰ ๊ฒฐ๊ณผ] 
# [0, 2, 4]

 

๐Ÿ– Dictionary Comprehension

๐Ÿ‘Œ set comprehension ๋งŒ๋“ค๊ธฐ

→ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ ๋ฌธ๋ฒ•์„ ์ค‘๊ด„ํ˜ธ({ }) ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑ

* ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜
[ x+y for x in range(10) for y in range(10) ]

# [์‹คํ–‰ ๊ฒฐ๊ณผ] 
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,  
# 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11,  
# 12, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 8, 9, 10, 11,  
# 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 8, 9, 10,  
# 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,  
# 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]  


* set comprehension { x+y for x in range(10) for y in range(10) } 

# [์‹คํ–‰ ๊ฒฐ๊ณผ] 
# {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}

 

 

๐Ÿ‘Œ dictionary comprehension ๋งŒ๋“ค๊ธฐ

  → key : value ์˜ ํ˜•ํƒœ๋กœ set comprehension ๋‚ด์šฉ ์ฑ„์šฐ๊ธฐ

* ํ•™์ƒ๋“ค์ด ํ•œ๋‹ฌ๊ฐ„ ๋‹ฌ๋ฆฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•  dictionary ์ƒ์„ฑ, ์ฒ˜์Œ ๊ฑฐ๋ฆฌ๋Š” 0์œผ๋กœ ์ง€์ •  

* dictionary comprehension  
students = ['์ฒ ์ˆ˜', '์˜ํฌ', '๊ธธ๋™', '์ˆœํฌ'] 
{ students: 0 for student in students }  

# [์‹คํ–‰ ๊ฒฐ๊ณผ] 
# {'์ฒ ์ˆ˜': 0, '์˜ํฌ': 0, '๊ธธ๋™': 0, '์ˆœํฌ': 0}
* ์ „ํ•™์„ ๊ฐ„ ํ•™์ƒ์˜ ์„ฑ์  ์ œ๊ฑฐ  

scores = {'์ฒ ์ˆ˜': 50, '์˜ํฌ': 80, '๊ธธ๋™': 90, '์ˆœํฌ': 60, '์ „ํ•™์ƒ': 100} 
scores = { name: score for name, score in scores.items() if name != '์ „ํ•™์ƒ' } 
print(scores)  

# [์‹คํ–‰ ๊ฒฐ๊ณผ] 
# {'๊ธธ๋™': 90, '์ˆœํฌ': 60, '์˜ํฌ': 80, '์ฒ ์ˆ˜': 50}
* scores ์— ๋”ฐ๋ฅธ ํ†ต๊ณผ, ๋ถˆํ†ต๊ณผ ์กฐ๊ฑด ์ง€์ •  
grades = { name: 'PASS' if value > 70 else 'No-Pass' for name, value in scores.items() } 
print(grades)  

# [์‹คํ–‰ ๊ฒฐ๊ณผ] 
# {'๊ธธ๋™': 'PASS', '์ˆœํฌ': 'No-PASS', '์˜ํฌ': 'PASS', '์ฒ ์ˆ˜': 'No-PASS'}

 

๐Ÿ– Tuple

๐Ÿ‘Œ Tuple Comprehension

 → ์ปดํ”„๋ฆฌํ—จ์…˜์œผ๋กœ ๋งŒ๋“  ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์ •๋ณด์ผ ๋•Œ ์ƒ์„ฑ

* Tuple Comprehension  ( x for x in range(10) )

# [์‹คํ–‰ ๊ฒฐ๊ณผ]
# <generator object <genexpr> at 0x104955f68>

 

๐Ÿ“ข generator : ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๋ฉด ๊ฐ’์„ ์†Œ๋น„ํ•œ ํ›„ ๋” ์ด์ƒ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์Œ

๋ฐ˜์‘ํ˜•