Python

[python] ์ž๋ฃŒ๊ตฌ์กฐ

winter17 2023. 2. 9. 23:26

๐ŸŒฑ  ๋ฆฌ์ŠคํŠธ  ๋ฉ”์„œ๋“œ

fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']

fruits.count('apple')
>> 2 # 'apple'์˜ ๊ฐœ์ˆ˜๋ฅผ ์…ˆ

fruits.index('banana')
>> 3 # 'banana'์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜

fruits.reverse() # ์›๋ณธ์„ ๋’ค์ง‘์–ด ๋ฒ„๋ฆผ
fruits
>> ['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']

fruits.append('grape') # 'grape'๋ฅผ ๋ฆฌ์ŠคํŠธ ๋งˆ์ง€๋ง‰์— append
fruits
>> ['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']

fruits.sort() # ๋ฆฌ์ŠคํŠธ ์›๋ณธ์„ ๋ณ€๊ฒฝ
fruits
>> ['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']

fruits.pop() # ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜์˜ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋Œ๋ ค์คŒ
'pear'

 

๐ŸŒฑ  ์ž๋ฃŒ๊ตฌ์กฐ (์Šคํƒ / ํ / ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ / ์ค‘์ฒฉ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜)

 

โ–ถ๏ธ ์Šคํƒ

  • last - in , first-out ํ›„์ž…์„ ์ถœ ๋ฐฉ์‹
stack = [3, 4, 5]

stack.append(6) # ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€
stack.append(7) # ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€
stack
>> [3, 4, 5, 6, 7]

stack.pop() # ๋งˆ์ง€๋ง‰ ์š”์†Œ ์‚ญ์ œ
>> 7

stack
>> [3, 4, 5, 6]

 

โ–ถ๏ธ ํ

  • first - in, first - out ์„ ์ž…์„ ์ถœ
  • ์ฒ˜์Œ์œผ๋กœ ๋„ฃ์€ ์š”์†Œ๋ฅผ ์ฒ˜์Œ์œผ๋กœ ๊บผ๋‚ด๋Š” ๋ฐฉ์‹์ด๋ผ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ ๋ฌธ์ œ์—์„œ๋Š” collections.deque ์‚ฌ์šฉํ•จ
from collections import deque

queue = deque(["Eric", "John", "Michael"])

queue.append("Terry")           
queue.append("Graham")  

queue.popleft()     # ๊ฐ€์žฅ ์™ผ์ชฝ์˜ ์š”์†Œ, ์ œ์ผ ์ฒ˜์Œ๋“ค์–ด๊ฐ„ ์š”์†Œ๋ฅผ ์‚ญ์ œ ํ›„ ๋ฐ˜ํ™˜            
>> 'Eric'
queue.popleft()                 
>> 'John'

print(queue)                           
>> deque(['Michael', 'Terry', 'Graham'])

 

โ–ถ๏ธ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜

# for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
squares = []
for x in range(10):
    squares.append(x**2)

# x๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฃจํ”„๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„์—๋„ ๋‚จ์•„์žˆ๊ฒŒ ๋งŒ๋“ฆ
squares = list(map(lambda x: x**2, range(10)))

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


# ์œ„์˜ ์‹ ๊ฒฐ๊ณผ ๊ฐ’์€ ๋ชจ๋‘ ๊ฐ™์Œ

 

โ–ถ๏ธ ์ค‘์ฒฉ ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜

# ์ด์ค‘ for๋ฌธ์œผ๋กœ ์ด์ค‘๋ฆฌ์ŠคํŠธ
transposed = []
for i in range(4):
    # the following 3 lines implement the nested listcomp
    transposed_row = []
    for row in matrix:
        transposed_row.append(row[i])
    transposed.append(transposed_row)
    
# for๋ฌธ์œผ๋กœ ์ด์ค‘๋ฆฌ์ŠคํŠธ
transposed = []
for i in range(4):
    transposed.append([row[i] for row in matrix])

# ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜์œผ๋กœ ์ด์ค‘๋ฆฌ์ŠคํŠธ
transposed = [[row[i] for row in matrix] for i in range(4)]

transposed
>> [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

# ์œ„์˜ ๋ณต์žกํ•œ ๊ณผ์ •๋ณด๋‹ค ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•ด์ง
list(zip(*matrix))
>> [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

 

๐ŸŒฑ  del๋ฌธ

  • ๊ฐ’ ๋Œ€์‹ ์— ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ญ๋ชฉ์„ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๊ฐ’์„ ๋Œ๋ ค์ฃผ๋Š” pop()๊ณผ ๋‹ค๋ฆ„
  • ์ธ๋ฑ์‹ฑ, ์Šฌ๋ผ์ด์‹ฑ, ์ „์ฒด๋ฆฌ์ŠคํŠธ ์‚ญ์ œ ๋ชจ๋‘ ๊ฐ€๋Šฅ
# ์ธ๋ฑ์‹ฑ
a = [-1, 1, 66.25, 333, 333, 1234.5]
del a[0]
>> [1, 66.25, 333, 333, 1234.5]

#์Šฌ๋ผ์ด์‹ฑ
del a[2:4]
a
>> [1, 66.25, 1234.5]

#์Šฌ๋ผ์ด์‹ฑ์„ ํ†ตํ•œ ์ „์ฒด๋ฆฌ์ŠคํŠธ ์‚ญ์ œ
del a[:]
a
>> []

 

๐ŸŒฑ  ํŠœํ”Œ๊ณผ ์‹œํ€€์Šค

  • ํŠœํ”Œ์€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค(immutable) => TypeError ๋ฐœ์ƒ
t = 12345, 54321, 'hello!'
t[0]
>> 12345
t
>> (12345, 54321, 'hello!') # ํŠœํ”Œ์€ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ž„

# ํŠœํ”Œ์˜ ์ค‘์ฒฉ
u = t, (1, 2, 3, 4, 5)
u
>> ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
empty = ()
singleton = 'hello',    # ํŠœํ”Œ์€ ๊ฐ’ ๋’ค์— ์‰ผํ‘œ!

print(len(empty))
# 0

print(len(singleton))
# 1

print(singleton)
# ('hello',)

 

๐ŸŒฑ  ์ง‘ํ•ฉ

a = set('abracadabra')
b = set('alacazam')

a         # ์ค‘๋ณต ์‚ญ์ œ
>> {'a', 'r', 'b', 'c', 'd'}

a - b     # ์ฐจ์ง‘ํ•ฉ
{'r', 'd', 'b'}

a | b     # ํ•ฉ์ง‘ํ•ฉ
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

a & b     # ๊ต์ง‘ํ•ฉ (a, b ๊ณตํ†ต์š”์†Œ)
{'a', 'c'}

a ^ b     # ๋Œ€์นญ์ฐจ์ง‘ํ•ฉ(๊ต์ง‘ํ•ฉ์„ ๋บ€ ๊ฒƒ)
{'r', 'd', 'b', 'm', 'z', 'l'}

 

๐ŸŒฑ  ๋”•์…”๋„ˆ๋ฆฌ

tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127 # ํ‚ค์™€ ๊ฐ’ ์ถ”๊ฐ€ํ•˜๊ธฐ
tel
>> {'jack': 4098, 'sape': 4139, 'guido': 4127}


del tel['sape']
tel
>> {'jack': 4098, 'guido': 4127}

list(tel) # ๋”•์…”๋„ˆ๋ฆฌ tel์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜
>> ['jack', 'guido', 'irv']

sorted(tel) # ๋ฆฌ์ŠคํŠธ tel ์ •๋ ฌ(์›๋ณธ๋ณ€๊ฒฝx)
>> ['guido', 'irv', 'jack']

 

๐ŸŒฑ  ๋ฃจํ”„ ํ…Œํฌ๋‹‰

# ๋”•์…”๋„ˆ๋ฆฌ loop ๋Œ๋ ค์„œ ํ‚ค์™€ ๊ฐ’์„ ๋™์‹œ์— ์ถœ๋ ฅํ•  ๋•Œ : items()
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():
    print(k, v)
    
>> gallahad the pure
>> robin the brave
# ์‹œํ€€์Šค๋ฅผ loop๋Œ๋ ค์„œ ์œ„์น˜์™€ ๊ฐ’ ๋™์‹œ์— ์–ป์Œ : enumerate()
for i, v in enumerate(['tic', 'tac', 'toe']):
    print(i, v)

>> 0 tic
>> 1 tac
>> 2 toe
# ๋‘˜ ์ด์ƒ์˜ ์‹œํ€€์Šค๋ฅผ ๋™์‹œ์— loop : zip()
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print(f'What is your {q}?  It is {a}.')

>> What is your name?  It is lancelot.
>> What is your quest?  It is the holy grail.
>> What is your favorite color?  It is blue.
# ์‹œํ€€์Šค๋ฅผ ๊ฑฐ๊พธ๋กœ loop : reversed() -- ์›๋ณธ๋ณ€๊ฒฝx
for i in reversed(range(1, 10, 2)):
    print(i)

>> 9
>> 7
>> 5
>> 3
>> 1
# ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ์‹œํ€€์Šค loop : sorted() -- ์›๋ณธ๋ณ€๊ฒฝx
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for i in sorted(basket):
    print(i)

>> apple
>> apple
>> banana
>> orange
>> orange
>> pear
# ์‹œํ€€์Šค ์ค‘๋ณต์š”์†Œ ์ œ๊ฑฐ์™€ ์ •๋ ฌ
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for f in sorted(set(basket)):
    print(f)

>> apple
>> banana
>> orange
>> pear

 

๐ŸŒฑ  ์กฐ๊ฑด ๋”๋ณด๊ธฐ

# ๋น„๊ต ์—ฐ์‚ฐ์ž๋Š” ๋ชจ๋‘ ๊ฐ™์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค
# a ๊ฐ€ b ๋ณด๋‹ค ์ž‘๊ณ , ๋™์‹œ์— b ๊ฐ€ c ๊ฐ™๋‹ค

a < b == c # ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ํŒŒ์ด์จ๋‹‰ ํ•˜์ง€์•Š์„๊นŒ!

a < b and b == c

 

๐ŸŒฑ  ์‹œํ€€์Šค์™€ ๋‹ค๋ฅธ ํ˜•๋“ค์„ ๋น„๊ตํ•˜๊ธฐ

# ์‹œํ€€์Šค์˜ ํ˜•์ด ๋‹ค๋ฅด์ง€๋งŒ ๋น„๊ต๋  ๋•Œ ์‚ฌ์ „์‹ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋Š”๋ฐ (์ฒซ ๋‘ ํ•ญ๋ชฉ, ๋‹ค์Œ ๋‘ ํ•ญ๋ชฉ ๋น„๊ต ~)
(1, 2, 3)              < (1, 2, 4)
[1, 2, 3]              < [1, 2, 4]

# ๋น„๊ต๋˜๋Š” ๋‘ ํ•ญ๋ชฉ์ด ๊ฐ™์€ ํ˜•์˜ ์‹œํ€€์Šค๋ผ๋ฉด, ์‚ฌ์ „์‹ ๋น„๊ต๊ฐ€ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ 
# ์žฌ๊ท€(recursion): ์–ด๋– ํ•œ ๊ฒƒ์„ ์ •์˜ํ•  ๋•Œ ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ
'ABC' < 'C' < 'Pascal' < 'Python'

# 3๊ณผ 4๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ 4๊ฐ€ ๋” ํฌ๋‹ค
(1, 2, 3, 4)           < (1, 2, 4)

# ์„œ๋กœ ๋‹ค๋ฅธ ์ˆซ์ž ํ˜•๋“ค์€ ๊ทธ๋“ค์˜ ์ˆซ์ž ๊ฐ’์— ๋”ฐ๋ผ ๋น„๊ต
(1, 2, 3)             == (1.0, 2.0, 3.0)

# ํ•œ ์‹œํ€€์Šค๊ฐ€ ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ๋จธ๋ฆฌ ๋ถ€๋ถ„ ์„œ๋ธŒ ์‹œํ€€์Šค๋ฉด, ์งง์€ ์‹œํ€€์Šค๊ฐ€ ์ž‘์€ ๊ฒƒ
(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)
(1, 2)                 < (1, 2, -1)