append(x)는 x 자체를 원소 하나로 넣고, extend(iterable)은 반복 가능한 값의 원소를 차례로 붙여. 문자열을 extend하면 글자가 하나씩 들어간다는 점이 둘의 차이를 가장 잘 보여줘.
빼고 끼우는 도구
remove는 처음 만난 값을 지우고, pop은 위치의 값을 꺼내 돌려주며, insert는 위치 앞에 넣어. del은 인덱스나 슬라이스 자체를 없애. 왼쪽에서 자주 넣고 빼는 큐라면 모든 원소를 밀어야 하는 리스트보다 collections.deque가 맞아.
sort와 sorted를 구분해
list.sort()는 원본을 제자리에서 정렬하고 None을 반환해. sorted(iterable)은 정렬된 새 리스트를 만들어. 둘 다 key로 비교 기준을 고르고 reverse=True로 내림차순을 만들 수 있어. Python 정렬은 안정적이어서 같은 키의 원래 순서를 보존해.
원칙: 원본의 순서를 바꿔도 되는지가 선택 기준이야. 바꿔도 되면 sort, 보존해야 하면 sorted를 써.
Code
append와 extend의 차이·python
letters = ['a', 'b']
# append: 원소 한 개 추가 (그게 list 라도)
letters.append(['c', 'd'])
print(letters) # ['a', 'b', ['c', 'd']]
letters = ['a', 'b']
# extend: iterable 의 각 원소 추가
letters.extend(['c', 'd'])
print(letters) # ['a', 'b', 'c', 'd']
# 조심 — 문자열도 iterable
letters = ['a', 'b']
letters.extend("cd")
print(letters) # ['a', 'b', 'c', 'd'] — 글자가 풀림!
# 같은 표현: my_list += other_iterable
letters = ['a', 'b']
letters += ['c', 'd']
print(letters) # ['a', 'b', 'c', 'd']
remove·pop·insert·del로 원소 다루기·python
items = ['a', 'b', 'c', 'b', 'd']
# 첫 등장 한 개 제거
items.remove('b')
print(items) # ['a', 'c', 'b', 'd']
# pop — 반환 + 제거. 스택의 핵심.
last = items.pop()
print(last, items) # 'd' ['a', 'c', 'b']
first = items.pop(0)
print(first, items) # 'a' ['c', 'b']
# 특정 인덱스에 끼워넣기
items.insert(0, 'X')
print(items) # ['X', 'c', 'b']
# del — 인덱스로 지움 (값은 반환하지 않음)
del items[1]
print(items) # ['X', 'b']
# 슬라이스 del — 범위 통째 제거
del items[:]
print(items) # []