λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
4️⃣ Python/Python 정리

[Python] 리슀트 κ΄€λ ¨ ν•¨μˆ˜ 총정리!

by seolhee2750 2021. 11. 15.

리슀트 μƒμ„±ν•˜λŠ” 법 λΆ€ν„° μ‚­μ œ, μˆ˜μ •, μ—°μ‚° 등을 ν•˜κΈ° μœ„ν•΄μ„œ

자주! μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ“€μ„ λͺ¨λ‘ μ •λ¦¬ν•΄μ„œ μ—…λ‘œλ“œν•œλ‹€.

 

πŸ“Œ 생성

"""
1차원 리슀트 생성
"""

# λΉ„μ–΄μžˆλŠ” 리슀트 생성
a = []
b = list()
print(a, b) # [] []

# 반볡된 κ°’ μ €μž₯ν•˜μ—¬ 생성
c = [0] * 10
print(c) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

# λ‹€μ–‘ν•œ νƒ€μž…μ„ ν•œ λ¦¬μŠ€νŠΈμ— μ €μž₯ν•˜λŠ” 것도 κ°€λŠ₯
d = ['a', 0, True]

# λ²”μœ„ μ§€μ •ν•΄μ„œ 생성
e = list(range(5))
f = list(range(1, 5))
g = list(range(1, 5, 2))
print(e, f, g) # [0, 1, 2, 3, 4] [1, 2, 3, 4] [1, 3]

# map ν•¨μˆ˜, lambda 식 μ‚¬μš©ν•˜μ—¬ 생성
h = list(map(lambda x: x ** 2, range(5)))
print(h) # [0, 1, 4, 9, 16]

"""
닀차원 리슀트 생성
"""

# 2차원 리슀트 생성
a_2 = [[0 for j in range(2)] for i in range(3)]
b_2 = [[0] * 2 for i in range(3)]
print(a_2) # [[0, 0], [0, 0], [0, 0]]
print(b_2) # [[0, 0], [0, 0], [0, 0]]

# 3차원 리슀트 생성
a_3 = [[[0 for k in range(2)] for j in range(3)] for i in range(2)]
b_3 = [[[0] * 2 for i in range(3)] for i in range(2)]
print(a_3) # [[[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]
print(b_3) # [[[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]


"""
ν†±λ‹ˆν˜• 리슀트 생성
"""

jagged = [[0] * i for i in [1, 3, 2, 5]]
print(jagged) # [[0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]

 

 

πŸ“Œ μ‚½μž…, μ‚­μ œ, μˆ˜μ •

"""
리슀트 κ°’ μ‚½μž…, μ‚­μ œ, μˆ˜μ • (append, insert, extend, remove, map λ“±)
"""

a = ['a', 'b']
b = [1, 2, 3]

# 맨 뒀에 μΆ”κ°€
a.append('c')
print(a) # ['a', 'b', 'c']

# λ”ν•˜κΈ° μ—°μ‚°μœΌλ‘œ 맨 뒀에 μΆ”κ°€ (리슀트 ν˜•νƒœ, κ°’ ν˜•νƒœ λͺ¨λ‘ κ°€λŠ₯ν•˜λ©°, λ°˜λŒ€λ‘œ -연산은 λΆˆκ°€)
a += ['d']
a += 'e'
print(a) # ['a', 'b', 'c', 'd', 'e']

# μ›ν•˜λŠ” μΈλ±μŠ€μ— κ°’ μΆ”κ°€
a.insert(0, 'zero')
print(a) # ['zero', 'a', 'b', 'c', 'd', 'e']

# 맨 뒀에 리슀트 λ”ν•˜κΈ°
a.extend([1, 2])
print(a) # ['zero', 'a', 'b', 'c', 'd', 'e', 1, 2]

# μ›ν•˜λŠ” μš”μ†Œ μ§€μš°κΈ°
a.remove('zero')
print(a) # ['a', 'b', 'c', 'd', 'e', 1, 2]

# map ν•¨μˆ˜, lambda 식을 ν™œμš©ν•œ ν˜•λ³€ν™˜, κ°’ μˆ˜μ •
print(list(map(lambda x: str(x), b))) # ['1', '2', '3']
print(list(map(str, b))) # ['1', '2', '3']
print(list(map(lambda x: str(x) if x < 2 else x, b))) # ['1', 2, 3]
print(list(map(lambda x: x+1, b))) # [2, 3, 4]
print(list(map(lambda x: list(range(0, x)), b))) # [[0], [0, 1], [0, 1, 2]]

 

 

πŸ“Œ μ •λ ¬

"""
리슀트 μ •λ ¬ (sort, sorted, reverse, reversed, slicing)
"""

# sortedλŠ” μ •λ ¬λœ 값을 λ°˜ν™˜ν•˜μ§€λ§Œ, 리슀트 자체λ₯Ό μ •λ ¬ν•˜μ§€λŠ” μ•ŠμŒ
# sortλŠ” μ •λ ¬λœ 값을 λ°˜ν™˜ν•˜μ§€ μ•Šμ§€λ§Œ, 리슀트 자체λ₯Ό μ •λ ¬ν•΄μ€Œ

b = [2, 3, 1]

print(sorted(b)) # [1, 2, 3]
print(sorted(b, reverse = True)) # [3, 2, 1]
print(b) # [2, 3, 1]

print(b.sort()) # None
print(b) # [1, 2, 3]
b.sort(reverse = True)
print(b) # [3, 2, 1]

# reverseλŠ” sort와 같이 뒀집은 값을 λ°˜ν™˜ν•˜μ§€λŠ” μ•Šκ³ , λŒ€μ‹  리슀트 자체λ₯Ό λ’€μ§‘μ–΄μ€Œ
# reversedλŠ” reverseμ™€λŠ” 달리 listμ—μ„œ μ œκ³΅ν•˜μ§€ μ•ŠλŠ” λ‚΄μž₯ν•¨μˆ˜μž„
#   => λ”°λΌμ„œ list(reversed(c))와 같은 ν˜•νƒœλ‘œ μ‚¬μš©ν•΄μ£Όμ–΄μ•Ό 함 (sorted와 λ§ˆμ°¬κ°€μ§€λ‘œ, λ°˜ν™˜λ§Œ ν•  뿐 리슀트 자체λ₯Ό μˆ˜μ •ν•˜μ§€λŠ” μ•ŠμŒ)

c = [1, 2, 2, 3]

print(reversed(c)) # <list_reverseiterator object at 0x10b4c6880>
print(list(reversed(c))) # [3, 2, 2, 1]
print(c.reverse()) # None
print(c) # [3, 2, 2, 1]

# μŠ¬λΌμ΄μ‹±μ„ ν™œμš©ν•˜λ©΄ list(reversed(c))와 같은 효과λ₯Ό λ‚Ό 수 있음
print(c[::-1]) # [1, 2, 2, 3]

# key ν‚€μ›Œλ“œ
# sort, sorted ν•¨μˆ˜ λͺ¨λ‘ reverse 뿐만 μ•„λ‹ˆλΌ key λ§€κ°œλ³€μˆ˜λ₯Ό 가진닀.
# keyλŠ” 정렬을 λͺ©μ μœΌλ‘œ ν•˜λŠ” ν•¨μˆ˜λ₯Ό κ°’μœΌλ‘œ λ„£λŠ”λ°, lambdaλ₯Ό μ΄μš©ν•  수 μžˆλ‹€.
# key값을 κΈ°μ€€μœΌλ‘œ μ •λ ¬λ˜κ³ , 기본값은 μ˜€λ¦„μ°¨μˆœμ΄λ‹€.

d = ['apple', 'hi', 'hello', 'e']
e = [(2, 'a'), (3, 'b'), (1, 'd'), (1, 'c')]

d.sort(key = lambda x: len(x)) # 각 μš”μ†Œμ˜ 길이λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬
e.sort(key = lambda x: (x[0], x[1])) # νŠœν”Œμ˜ μ•ž μš”μ†Œ κΈ°μ€€μœΌλ‘œ μ •λ ¬, 같을 경우 λ’· μš”μ†Œ κΈ°μ€€ μ •λ ¬
print(d) # ['e', 'hi', 'apple', 'hello']
print(e) # [(1, 'c'), (1, 'd'), (2, 'a'), (3, 'b')]

 

 

πŸ“Œ 검색, μ—°μ‚°

"""
리슀트 검색, μ—°μ‚° (slicing, all, any, max, min, enumerate, filter, sum, reduce, zip, len λ“±)
"""

list_a = [1, 2, 3]
list_b = [1, 0, 0]
list_c = ['a', 'b', 'c']

# νŒŒμ΄μ¬μ—μ„œλŠ” 인덱슀둜 -1을 μž…λ ₯ν•˜λ©΄ κ°€μž₯ λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό 가리킴
print(list_a[-1]) # 3

# μŠ¬λΌμ΄μ‹±μ„ ν™œμš©ν•˜λ©΄ 리슀트 μžμ²΄λŠ” κ·ΈλŒ€λ‘œ 두고, μ›ν•˜λŠ” λ²”μœ„μ˜ 값듀을 λ°˜ν™˜ν•΄μ€Œ
print(list_a[0:2]) # [1, 2]
print(list_a[:2]) # [1, 2]
print(list_a[2:]) # [3]

# all은 ν•˜λ‚˜λΌλ„ 0(False)κ°€ 있으면 Falseλ₯Ό λ°˜ν™˜ν•΄μ€Œ (μ „λΆ€ λ‹€ Trueμ—¬μ•Ό True둜 인정)
# anyλŠ” ν•˜λ‚˜λΌλ„ 1(True)κ°€ 있으면 Trueλ₯Ό λ°˜ν™˜ν•΄μ€Œ (λͺ‡ 개만 True여도 True둜 인정)
print(all(list_a)) # True
print(all(list_b)) # False
print(any(list_a)) # True
print(any(list_b)) # True

# μ΅œλŒ€, μ΅œμ†Œ
print(max(list_a)) # 3
print(min(list_a)) # 1

# μ—΄κ±°ν•˜λŠ” ν•¨μˆ˜λ‘œ, μˆœμ„œκ°€ μžˆλŠ” μžλ£Œν˜•μ„ μž…λ ₯으둜 λ°›μ•„μ„œ 인덱슀 값을 ν¬ν•¨ν•˜λŠ” enumerate 객체λ₯Ό λ°˜ν™˜ (보톡 for 문으둜 많이 μ‚¬μš©)
for i, name in enumerate(list_c):
    print(i, name)
# 0 a
# 1 b
# 2 c

# filter ν•¨μˆ˜, lambda 식을 ν™œμš©ν•œ κ°’ 검색
print(list(filter(lambda x: x == 0, list_b))) # [0, 0]

# λͺ¨λ“  μš”μ†Œμ˜ ν•©
print(sum(list_a)) # 6

# λˆ„μ  μ—°μ‚° (파이썬3μ—μ„œλŠ” reduce μ‚¬μš©ν•˜λ €λ©΄ μ•„λž˜μ™€κ°™μ€ μ„ μ–Έ ν•„μš”)
from functools import reduce
print(reduce(lambda x, y: x + y, list_a)) # 6

# λ¬Άμ–΄μ£ΌκΈ° (같은 인덱슀 μš”μ†ŒλΌλ¦¬ λ¬Άμ–΄μ€Œ)
print(list(zip(list_a, list_b))) # [(1, 1), (2, 0), (3, 0)]
print(list(zip(list_a, list_b, list_c))) # [(1, 1, 'a'), (2, 0, 'b'), (3, 0, 'c')]

# 길이
print(len(list_a)) # 3

λŒ“κΈ€