Python 강좌 / 리스트 만들고 항목 추가·수정·삭제하기
리스트는 순서가 있고 내용을 바꿀 수 있는 자료형입니다. 항목을 추가·수정·삭제할 수 있지만, 리스트를 정렬하는 메서드와 새 정렬 결과를 만드는 함수를 구분해야 합니다.
항목 접근과 수정 방법
리스트는 대괄호로 만들며 첫 인덱스는 0입니다. 인덱스로 한 항목을 바꾸거나 슬라이스로 일부를 복사할 수 있습니다. 같은 값이 여러 번 들어갈 수 있고, 숫자·문자열 등 서로 다른 자료형을 담을 수도 있지만 합계를 구할 데이터는 같은 의미와 단위로 맞추는 것이 좋습니다.
관련 동작과 지원 조건은 Python: datastructures에서 확인할 수 있습니다.
| 동작 | 코드 | 주의점 |
|---|---|---|
| 끝에 추가 | items.append(value) | 리스트 하나를 넣으면 중첩 항목이 됨 |
| 여러 항목 추가 | items.extend(values) | 반복 가능한 값의 항목을 차례로 추가 |
| 위치로 삭제 | items.pop(index) | 삭제한 값을 반환 |
| 값으로 삭제 | items.remove(value) | 첫 번째 일치만 삭제, 없으면 오류 |
복사한 리스트의 공유와 변환은 변수의 범위와 변경 가능한 객체의 동작 이해하기 및 리스트·딕셔너리·집합 컴프리헨션 사용하기에서 사용하는 규칙과 연결됩니다.
전체 예제와 실행 결과
별도의 실습 폴더에서 아래 파일을 UTF-8로 저장합니다. 가상환경을 선택한 터미널에서 python lists.py 명령으로 실행합니다. macOS·Ubuntu에서 가상환경을 사용하지 않는 경우 명령 이름을 python3으로 바꿉니다.
lists.py 파일의 전체 내용입니다.
amounts = [3500, 8000, 2500]
amounts.append(1000)
amounts[0] = 4000
removed = amounts.pop()
print(amounts, removed)
print(sorted(amounts))
print(amounts)
amounts.sort()
print(amounts)
예상 결과는 다음과 같습니다.
[4000, 8000, 2500] 1000
[2500, 4000, 8000]
[4000, 8000, 2500]
[2500, 4000, 8000]
원본 정렬과 새 리스트 구분하기
sorted(amounts)는 새 리스트를 반환하므로 원본 순서는 그대로입니다. amounts.sort()는 원본을 바꾸고 반환값은 None입니다. amounts = amounts.sort()처럼 쓰면 리스트 대신 None을 저장하게 됩니다.
copy = amounts[:]는 바깥 리스트를 복사하는 얕은 복사입니다. 항목에 또 다른 리스트가 있으면 안쪽 객체까지 독립적으로 복제되지는 않습니다. 단순 대입 other = amounts는 복사조차 하지 않고 같은 리스트에 이름만 더 연결합니다.
list.sort()는 원본 리스트를 정렬하고 None을 반환합니다. sorted(iterable)은 새 리스트를 반환합니다. 따라서 items = items.sort()로 쓰면 정렬된 리스트가 아니라 None을 대입합니다. 두 방법 모두 내부 객체까지 깊게 복사하는 기능은 아닙니다.
| 기능 | 결과 | 관찰 |
|---|---|---|
| items.sort() | None | 원본 변경 |
| sorted(items) | 새 리스트 | 원본 순서 유지 |
빈 목록과 반복 중 변경 점검하기
빈 리스트의 0번째 항목을 읽거나 pop()을 호출하면 IndexError가 발생합니다. 항목이 있을 때만 처리할 조건을 넣거나 데이터가 반드시 있어야 하는 계약을 검증해야 합니다. remove는 없는 값에 ValueError를 발생시킵니다.
반복 중 같은 리스트에서 항목을 삭제하면 위치가 바뀌어 항목을 건너뛸 수 있습니다. 원본의 복사본을 돌거나 조건에 맞는 새 리스트를 만드는 방식이 더 명확합니다. amounts에 0을 하나 추가해 합계와 정렬이 어떻게 바뀌는지 확인한 뒤 원래 데이터로 되돌려 보세요.




