๐ ์ด ํฌ์คํ ์์๋ Python์ comprehensions ๋ฌธ๋ฒ์ ๋ํด์ ์ ๋ฆฌํ์์ต๋๋ค.
๐ฅ list comprehension์ด ๋ญ๊น์..?
๐ฅ comprehension์ด ๊ฐ๋ฅํ sequence type
๐ฅ Assignments
โ๏ธ 1๋ถํฐ 10๊น์ง ์ ์ ์ค ํ์๋ง ์๋ก์ด ๋ฆฌ์คํธ ๊ฐ์ฒด์ ๋ด์ผ๋ ค๊ณ ํ๋ฉด ์ต์ 4๊ฐ์ line์ด ํ์ํฉ๋๋ค.
res = [] for i in range(1,11): if i % 2: res.append(i) print(res) # [1, 3, 5, 7, 9]
โ๏ธ ์ด๋ฒ์ filter ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค.
res = list(filter(lambda x: x % 2, range(1, 11))) print(res) # [1, 3, 5, 7, 9]
โ๏ธ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
์ด์ ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ ์ ์๋ ์ถ์ฝํ ํํ์์ด๊ณ , ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
โ๏ธ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
์ ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ๋ํ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง ์๋ก ์ผ๋ฐ์ ์ธ ์ํฉ์์ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
์ด ๋ ๋์ ํจ์จ์ฑ์ ๊ฐ์ง๋๋ค.
res = [i for i in range(1,11) if i % 2] print(res) # [1, 3, 5, 7, 9]
โ๏ธ ๋ํ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ if๋ฌธ์ ์ต์ ์ผ๋ก ์ ํํ์ฌ ์ถ๊ฐํ ์ ์๊ณ , ์ปดํ๋ฆฌํจ์ ๋ฌธ๋ฒ์ ์ค์ฒฉ์ํค๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ๋จ, ์ปดํจ๋ฆฌํจ์ ๋ด์ ๊น์ด๊ฐ 3๋จ๊ณ ์ด์ ๋์ด๋๋ฉด ๊ฐ๋ ์ฑ์ด ํ์ ํ ์ค์ด๋ญ๋๋ค.
a = [[i for i in range(10) if i % 2] for j in range(4)] print(a) # [[1, 3, 5, 7, 9], [1, 3, 5, 7, 9], [1, 3, 5, 7, 9], [1, 3, 5, 7, 9]]
โ๏ธ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ ์๋ก์ด ๋ณ์์ appendํ๋ ๊ณผ์ ์ด ์๋ต๋ ์ถ์ฝํ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ์์๊ฐ ๋ชจ๋ ๊ฐ์ ๊ฐ์ผ์ง๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋๋ค.
p1 = [['py']*3 for n in range(3)] p2 = [['py']*3]*3 print(p1) # [['py', 'py', 'py'], ['py', 'py', 'py'], ['py', 'py', 'py']] print(p2) # [['py', 'py', 'py'], ['py', 'py', 'py'], ['py', 'py', 'py']] print(id(p1[0]), id(p1[1]), id(p1[2])) # 140179978965888 140179978972096 140179978930048 print(id(p2[0]), id(p2[1]), id(p2[2])) # 140180045237888 140180045237888 140180045237888
โ๏ธ ์ด์ ๋ฐ์ดํฐ์ ์์ ์ด ๋ฐ์๋์์ ๋, ๊ฐ ์์๊ฐ ์์ฉ๋๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
โ๏ธ ์ฆ, ๊ฐ ๊ฐ์ ์์๊ฐ ๋
๋ฆฝ์ ๊ฐ์ฒด๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํด์ ์์์น ๋ชปํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๊ณ ์ถ์ ๋์๋ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์
์ด ์์ ํฉ๋๋ค.
p1 = [['py']*3 for n in range(3)] p2 = [['py']*3]*3 p1[1][1] = 'js' p2[1][1] = 'js' print(p1) # [['py', 'py', 'py'], ['py', 'js', 'py'], ['py', 'py', 'py']] print(p2) # [['py', 'js', 'py'], ['py', 'js', 'py'], ['py', 'js', 'py']]
โ๏ธ dict, set ๋ฑ์ sequence type์ด๊ธฐ ๋๋ฌธ์ comprehension ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ๏ธ 1๋ถํฐ 10๊น์ง ์๋ฅผ key๋กํ๊ณ ์ ๊ณฑํ ์๋ฅผ value๋กํ๋ dict๋ ์๋์ ๊ฐ์ต๋๋ค.
squares = {} for i in range(1, 11): squares[i] = i**2 print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
โ๏ธ dict comprehension์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
squares = {i: i**2 for i in range(1, 11)} print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
โ๏ธ set๋ comprehension์ด ๊ฐ๋ฅํ์ง๋ง ์์๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค.
res = {i*i for i in range(1, 11) if i % 2} print(res) # {1, 9, 81, 49, 25}
โ๏ธ ๋ค์๊ณผ ๊ฐ์ ๋์๋ชฉ๋ก์ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ก์๋, ๋์์ด๋ฆ์ด S๋ก ์์ํ์ง ์๋ ๋์๋ง ๋ฆฌ์คํธ๋ก ๋ง๋ค ๋ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์์ฑํด ๋ณด์ธ์.
cities = ["Tokyo","Shanghai","Jakarta","Seoul","Guangzhou","Beijing","Karachi","Shenzhen","Delhi"] def func(l): res = [i for i in l if i[0] != 'S'] return res print(func(cities)) # ['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']
โ๏ธ ๋ค์๊ณผ ๊ฐ์ ๋์, ์ธ๊ตฌ์๊ฐ ํํ์ ๋ฆฌ์คํธ๋ก ์ฃผ์ด์ก์๋, ํค๊ฐ ๋์, ๊ฐ์ด ์ธ๊ตฌ์์ธ ๋์ ๋๋ฆฌ๋ฅผ ๋์ ๋๋ฆฌ ์ปดํ๋ฆฌํจ์ ์ ์ฌ์ฉํ ํจ์๋ฅผ ์์ฑํด ๋ณด์ธ์.
population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000), ('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ('Shenzhen', 23300000), ('Delhi', 21753486)] def func(l): res = {i[0]:i[1] for i in l} return res print(func(population_of_city)) """ {'Tokyo': 36923000, 'Shanghai': 34000000, 'Jakarta': 30000000, 'Seoul': 25514000, 'Guangzhou': 25000000, 'Beijing': 24900000, 'Karachi': 24300000, 'Shenzhen': 23300000, 'Delhi': 21753486 } """