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을 하나 추가해 합계와 정렬이 어떻게 바뀌는지 확인한 뒤 원래 데이터로 되돌려 보세요.