# 리스트: 변경 가능 (mutable)
arr = [1, 2, 3]
arr[0] = 10 # ✅ 가능
arr.append(4) # ✅ 가능
# 튜플: 변경 불가능 (immutable)
tup = (1, 2, 3)
# tup[0] = 10 # ❌ TypeError!
# tup.append(4) # ❌ AttributeError!
# 하지만 재할당은 가능
tup = (10, 20, 30) # ✅ 새로운 튜플 생성
import sys
arr = [1, 2, 3, 4, 5]
tup = (1, 2, 3, 4, 5)
# 메모리 사용량
sys.getsizeof(arr) # 104 bytes
sys.getsizeof(tup) # 80 bytes # 튜플이 더 작음!
# 생성 속도
import timeit
# 리스트 생성
timeit.timeit('[1, 2, 3, 4, 5]', number=1000000)
# 약 0.06초
# 튜플 생성
timeit.timeit('(1, 2, 3, 4, 5)', number=1000000)
# 약 0.02초 # 튜플이 더 빠름!
리스트를 사용:
튜플을 사용:
# 좌표는 변하지 않으므로 튜플
point = (3, 5)
points = [(1, 2), (3, 4), (5, 6)]
# 딕셔너리 키로 튜플 사용
d = {(0, 0): 'origin', (1, 1): 'diagonal'}
# 함수에서 여러 값 반환
def get_stats(arr):
return (min(arr), max(arr), sum(arr)) # 튜플로 반환
min_val, max_val, total = get_stats([1, 2, 3, 4, 5])
# [표현식 for 변수 in 반복가능객체 if 조건]
# 제곱수
squares = [x**2 for x in range(1, 11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 짝수만
evens = [x for x in range(1, 11) if x % 2 == 0]
# [2, 4, 6, 8, 10]
# 짝수만 제곱
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
# [4, 16, 36, 64, 100]
# [참일때값 if 조건 else 거짓일때값 for 변수 in 반복가능객체]
# 짝수는 그대로, 홀수는 0
result = [x if x % 2 == 0 else 0 for x in range(1, 11)]
# [0, 2, 0, 4, 0, 6, 0, 8, 0, 10]
# 양수는 그대로, 음수는 절댓값
arr = [-3, -1, 2, -4, 5]
result = [x if x >= 0 else -x for x in arr]
# [3, 1, 2, 4, 5]
# 3의 배수는 'Fizz', 5의 배수는 'Buzz', 둘 다면 'FizzBuzz', 아니면 숫자
result = [
'FizzBuzz' if x % 15 == 0
else 'Fizz' if x % 3 == 0
else 'Buzz' if x % 5 == 0
else x
for x in range(1, 16)
]
# 2차원 배열 생성
matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)]
# [[1, 2, 3],
# [2, 4, 6],
# [3, 6, 9]]
# 1차원으로 펼치기 (flatten)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [num for row in matrix for num in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 설명: for문 순서대로 읽기
# for row in matrix:
# for num in row:
# flat.append(num)
# 조건 추가: 짝수만
flat_even = [num for row in matrix for num in row if num % 2 == 0]
# [2, 4, 6, 8]
# 2차원 배열에서 조건부 필터링
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 각 행에서 짝수만
result = [[num for num in row if num % 2 == 0] for row in matrix]
# [[2], [4, 6], [8]]
# 홀수 행의 짝수만
result = [
[num for num in row if num % 2 == 0]
for i, row in enumerate(matrix)
if i % 2 == 1
]
# [[4, 6]]
# 곱셈표 (특정 조건)
result = [
[i*j for j in range(1, 10) if (i*j) % 2 == 0]
for i in range(1, 10)
]