1. append()
특징
- 리스트의 끝에 새로운 요소를 추가한다.
- 하나의 요소만 추가할 수 있다.
예제
fruits = ['apple', 'banana']
fruits.append('cherry')
print(fruits) # ['apple', 'banana', 'cherry']
주의사항
- 리스트 자체가 변경되므로 반환값은 None이다.
이 점 때문에 실수를 했던 적이 있다. append()의 결과를 변수에 할당하려다 None을 얻게 되는 경우가 있었다. 메서드 체이닝을 할 때도 이 점을 주의해야 한다.
2. extend()
특징
- 리스트에 다른 리스트나 반복 가능한 객체의 모든 요소를 추가한다.
- 여러 요소를 한 번에 추가할 수 있다.
예제
fruits = ['apple', 'banana']
fruits.extend(['cherry', 'date'])
print(fruits) # ['apple', 'banana', 'cherry', 'date']
주의사항
- append와 달리, 리스트에 다른 iterable 객체(리스트, 튜플, 집합 등)의 모든 요소를 하나씩 추가하는 방식으로 작동한다.
- extend를 사용할 때는 반드시 iterable 객체를 인수로 제공해야 한다는 점을 유의해야 한다.
한 번은 extend()와 append()를 혼동해서 사용하다가 큰 문제를 겪었다. 리스트 안에 리스트를 넣으려고 했는데, extend()를 사용해서 모든 요소가 평탄화되어 추가되는 실수를 했다. 이후로는 항상 의도를 명확히 하고 적절한 메서드를 선택하는 습관을 들였다.
3. insert()
특징
- 특정 위치에 요소를 삽입한다.
- 첫 번째 인자로 삽입할 위치의 인덱스를, 두 번째 인자로 삽입할 요소를 받는다.
예제
fruits = ['apple', 'banana']
fruits.insert(1, 'cherry')
print(fruits) # ['apple', 'cherry', 'banana']
주의사항
- 인덱스가 리스트의 길이보다 크면 끝에 추가된다.
이 특성 때문에 예상치 못한 동작이 발생할 수 있다. 특히 리스트의 길이를 정확히 모르는 상황에서 사용할 때는 주의가 필요하다. 가능하면 명시적으로 append()를 사용하는 것이 더 안전할 수 있다.
4. remove()
특징
- 리스트에서 지정된 값을 가진 첫 번째 요소를 제거한다.
예제
fruits = ['apple', 'banana', 'cherry', 'banana']
fruits.remove('banana')
print(fruits) # ['apple', 'cherry', 'banana']
주의사항
지정된 값이 리스트에 없으면 ValueError가 발생한다.
fruits = ['apple', 'banana', 'cherry', 'banana'] fruits.remove('kiwi') # ValueError: list.remove(x): x not in list
이 에러 때문에 이슈를 겪었던 적이 있다. 특히 사용자 입력을 바탕으로 요소를 제거할 때 이 에러를 고려하지 않으면 프로그램이 예기치 않게 종료될 수 있다. 항상 try-except 구문을 사용하거나, in 연산자로 미리 확인하는 습관을 들여야겠다는 생각이 들었다.
5. pop()
특징
- 지정된 인덱스의 요소를 제거하고 반환한다.
- 인덱스를 지정하지 않으면 마지막 요소를 제거하고 반환한다.
예제
fruits = ['apple', 'banana', 'cherry']
popped = fruits.pop(1)
print(popped) # banana
print(fruits) # ['apple', 'cherry']
주의사항
빈 리스트에서 pop을 호출하면 IndexError가 발생한다.
fruits = [] fruits.pop(0) # IndexError: pop from empty list
6. clear()
특징
- 리스트의 모든 요소를 제거한다.
예제
fruits = ['apple', 'banana', 'cherry']
fruits.clear()
print(fruits) # []
주의사항
리스트 객체 자체는 그대로 유지되고 내용만 비워진다.
리스트 객체 자체를 삭제하려면
del
키워드를 사용한다.fruits = ['apple', 'banana', 'cherry'] del fruits # 리스트 객체 자체를 삭제 print(fruits) # NameError: name 'fruits' is not defined
del 키워드 사용에 주의해야 한다. 한 번은 실수로 중요한 리스트 변수를 del로 삭제해서 전체 프로그램에 문제를 일으킨 적이 있다. 변수 삭제는 매우 신중하게 접근해야 한다.
7. index()
특징
- 지정된 값을 가진 첫 번째 요소의 인덱스를 반환한다.
예제
fruits = ['apple', 'banana', 'cherry', 'banana']
index = fruits.index('banana')
print(index) # 1
주의사항
지정된 값이 리스트에 없으면 ValueError가 발생한다.
fruits = ['apple', 'banana', 'cherry', 'banana'] index = fruits.index('kiwi') # ValueError: 'kiwi' is not in list
8. count()
특징
- 리스트에서 지정된 값의 출현 횟수를 반환한다.
예제
fruits = ['apple', 'banana', 'cherry', 'banana']
count = fruits.count('banana')
print(count) # 2
주의사항
값이 리스트에 없으면 0을 반환한다.
fruits = ['apple', 'banana', 'cherry', 'banana'] count = fruits.count('kiwi') print(count) # 0
9. reverse()
특징
- 리스트의 요소 순서를 역순으로 바꾼다.
예제
fruits = ['apple', 'banana', 'cherry']
fruits.reverse()
print(fruits) # ['cherry', 'banana', 'apple']
주의사항
- 리스트 자체를 변경하며 반환값은 None이다.
10. copy()
특징
- 리스트의 얕은 복사본을 반환한다.
예제
fruits = ['apple', 'banana', 'cherry']
new_fruits = fruits.copy()
print(new_fruits) # ['apple', 'banana', 'cherry']
주의사항
얕은 복사이므로 중첩된 객체는 참조가 복사된다.
list_A = ["ABC", ["DEF", "GHI"]] list_B = list_A.copy() list_B[1].append("JKL") print(list_A) # ['ABC', ['DEF', 'GHI', 'JKL']] print(list_B) # ['ABC', ['DEF', 'GHI', 'JKL']]
이런 참조 복사의 특성 때문에 많은 버그가 발생할 수 있다. 중첩된 리스트나 복잡한 객체를 다룰 때는 항상 복사 방식을 신중하게 선택해야 한다는 것을 깨달았다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
파이썬 - 컴프리헨션 (0) | 2024.11.27 |
---|---|
파이썬 - 튜플 개념 정리 (0) | 2024.11.26 |
파이썬 - 문자열 메서드 정리 (0) | 2024.11.25 |
파이썬의 자료형 (0) | 2024.11.24 |
파이썬의 기원과 철학, 특징 (1) | 2024.11.24 |