๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ Python

์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ 2์žฅ - ๋ฆฌ์ŠคํŠธ์™€ ๋”•์…”๋„ˆ๋ฆฌ

by dev.py 2025. 3. 12.

Better way 11 ์‹œํ€€์Šค๋ฅผ ์Šฌ๋ผ์ด์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํ˜€๋ผ

a = ['a', 'b', 'c', 'd', 'e']

# ์ฒ˜์Œ ๋˜๋Š” ๋๊นŒ์ง€ ์Šฌ๋ผ์ด์‹ฑ ํ• ๋•Œ๋Š” ์ฒ˜์Œ๊ณผ ๋ ์ธ๋ฑ์Šค๋ฅผ ์ƒ๋žตํ•˜์ž
assert a[:5] == a[0:5] # True
assert a[5:] == a[5:len(a)] # True

# ์Šฌ๋ผ์ด์‹ฑ ๊ฒฐ๊ณผ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด
b = a[3:]
assert a is b # False (๋‹ค๋ฅธ ๊ฐ์ฒด)
assert a[3:] == b # True

# ์‹œ์ž‘๊ณผ ๋ ์ธ๋ฑ์Šค ์ƒ๋žตํ•˜๋ฉด ์›๋ž˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณต์‚ฌํ•œ ๋ฆฌ์ŠคํŠธ
b = a[:]
print(b)
>>> ['a', 'b', 'c', 'd', 'e']

 

Better way 12 ์ŠคํŠธ๋ผ์ด๋“œ์™€ ์Šฌ๋ผ์ด์Šค๋ฅผ ํ•œ ์‹์— ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ

# ์Šฌ๋ผ์ด๋“œ list[์‹œ์ž‘:๋:์ฆ๊ฐ€๊ฐ’]
x = ['๋นจ๊ฐ•', '์ฃผํ™ฉ', '๋…ธ๋ž‘', '์ดˆ๋ก', 'ํŒŒ๋ž‘', '์ž์ฃผ']

odds = x[::2] # ['๋นจ๊ฐ•', '๋…ธ๋ž‘', 'ํŒŒ๋ž‘']
evens = x[1::2] # ['์ฃผํ™ฉ', '์ดˆ๋ก', '์ž์ฃผ']

# ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด ๋ฐ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์—ด๋„ ๊ฐ€๋Šฅ
x = b'mongoos'
y = x[::-1] # b'esoognom'

x = 'ๆ˜ฅๅค็ง‹ๅ†ฌ'
y = x[::-1] # ๅ†ฌ็ง‹ๅคๆ˜ฅ

 

๋‹ค๋งŒ ์Šฌ๋ผ์ด์‹ฑ ๊ตฌ๋ฌธ์— ์‹œ์ž‘:๋:์ฆ๊ฐ€๊ฐ’ ์„ ๋ชจ๋‘ ๋„ฃ์œผ๋ฉด ํ˜ผ๋ž€์Šค๋Ÿฌ์šฐ๋‹ˆ ํ”ผํ•˜์ž

x = ['a', 'b', 'c', 'd', 'e'] # ['d', 'b'] ๋กœ ์Šฌ๋ผ์ด์‹ฑ ๋ฐ ์ŠคํŠธ๋ผ์ด๋“œ(step) ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

# ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์˜ˆ์‹œ
x[-2:2:-2]  # ['d']
x[-2::-2]   # ['d', 'b']
x[2:2:-2]   # []


# ์ŠคํŠธ๋ผ์ด๋”ฉ๊ณผ ์Šฌ๋ผ์ด์‹ฑ์„ ๋ถ„๋ฆฌํ•˜์ž
# - ๋จผ์ € ์Šฌ๋ผ์ด์‹ฑ ์ˆ˜ํ–‰
y = x[1:4]  # ['b', 'c', 'd']

# - ์ดํ›„ ์ŠคํŠธ๋ผ์ด๋”ฉ ์ ์šฉ
z = y[::-2]  # ['d', 'b']

 

Better way 13 ์Šฌ๋ผ์ด์‹ฑ๋ณด๋‹ค๋Š” ๋‚˜๋จธ์ง€๋ฅผ ๋ชจ๋‘ ์žก์•„๋‚ด๋Š” ์–ธํŒจํ‚น์„ ์‚ฌ์šฉํ•˜๋ผ

๋ณ„ํ‘œ์‹ (starred expression)์„ ์‚ฌ์šฉํ•˜์ž

# ์•ˆ ์ข‹์€ ์˜ˆ์‹œ - ์Šฌ๋ผ์ด์‹ฑ
values = [1, 2, 3, 4, 5]
first = values[0]
middle = values[1:-1]
last = values[-1]

# ์ข‹์€ ์˜ˆ์‹œ - ์–ธํŒจํ‚น(*)
values = [1, 2, 3, 4, 5]
first, *middle, last = values

 

Better way 16 in์„ ์‚ฌ์šฉํ•˜๊ณ  ๋”•์…”๋„ˆ๋ฆฌ ํ‚ค๊ฐ€ ์—†์„ ๋•Œ KeyError๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ณด๋‹ค๋Š” get์„ ์‚ฌ์šฉํ•˜๋ผ

user_info = {'name': 'Alice'}


# ์•ˆ ์ข‹์€ ์˜ˆ์‹œ - ์กฐ๊ฑด๋ฌธ
if 'age' in user_info:
	user_age = user_info['age']
else:
	user_age = 'Unknown'

# ์•ˆ ์ข‹์€ ์˜ˆ์‹œ - ์˜ˆ์™ธ์ฒ˜๋ฆฌ
try:
    user_age = user_info['age']
except KeyError:
    user_age = 'Unknown'

# ์ข‹์€ ์˜ˆ์‹œ - get() ์‚ฌ์šฉ
user_age = user_info.get('age', 'Unknown')

 

Better way 17 ๋‚ด๋ถ€ ์ƒํƒœ์—์„œ ์›์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” setdefault๋ณด๋‹ค defaultdict๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

key = "key"
new_item = "new"


# ์•ˆ ์ข‹์€ ์˜ˆ์‹œ - ์กฐ๊ฑด๋ฌธ
data_store = {}
if key not in data_store:
	data_store[key] = []
data_store[key].append(new_item)


# ์•ˆ ์ข‹์€ ์˜ˆ์‹œ - setdefault
data_store = {}
data_store.setdefault('key', []).append(new_item)

# ์ข‹์€ ์˜ˆ์‹œ - defaultdict
data_store = defaultdict(list)
data_store['key'].append(1

 

Better way 18 __missing__์„ ์‚ฌ์šฉํ•ด ํ‚ค์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋””ํดํŠธ ๊ฐ’์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‘๋ผ

# ์•ˆ ์ข‹์€ ์˜ˆ์‹œ - ๋งค๋ฒˆ get() ํ™”๋ฃกํ•˜์—ฌ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •
default_dict = {}
default_value = default_dict.get('unknown', f"Default value for unknown")
print(default_value)  # Default value for unknown


# ์ข‹์€ ์˜ˆ์‹œ - ๋‚ด์žฅ ํ•จ์ˆ˜ __missing__ ์„ ๊ตฌํ˜„ํ•˜์—ฌ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •
class DefaultDict(dict):
    def __missing__(self, key):
        return f"Default value for {key}"

custom_dict = DefaultDict()
print(custom_dict['unknown']) # Default value for unknown

 

 

 

Effective Python 2nd ์ดํŽ™ํ‹ฐ๋ธŒ ํŒŒ์ด์ฌ : ํŒŒ์ด์ฌ ์ฝ”๋”ฉ์˜ ๊ธฐ์ˆ  : ๋„ค์ด๋ฒ„ ๋„์„œ

๋„ค์ด๋ฒ„ ๋„์„œ ์ƒ์„ธ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

search.shopping.naver.com