19. Python의 리스트(List)에 자료 삭제하는 방법을 알아보아요.

안녕하세요. 언휴예요.

이전 강의에서는 Python의 리스트(List)에 자료를 보관하는 방법을 살펴보았어요. 순차 보관하는 append, 원하는 위치에 보관하는 insert, 다른 리스트의 원소 항목을 복사하여 자신의 항목으로 순차 보관하는 extend 함수(리스트의 멤버 메서드)가 있었죠.

이번에는 Python의 리스트에 자료를 삭제하는 방법을 알아볼게요.

Python의 리스트는 보관한 원소 중에 원하는 항목을 제거하는 remove, 맨 마지막 원소 항목 혹은 원하는 인덱스의 원소 항목을 제거하고 반환하는 pop, 모든 원소 항목을 제거하는 clear 함수(멤버 메서드)를 제공합니다.

  • remove 멤버메서드를 이용하여 같은 값을 갖는 원소 항목 제거하기

remove 멤버 메서드에 입력 인자로 특정 데이터를 전달하면 보관하고 있는 원소 항목 중에 같은 값을 갖는 원소 항목을 지워줍니다. 만약 같은 값을 갖는 원소가 두 개 이상 있을 때는 앞에 있는 원소 항목을 제거합니다.

다음은 1, 2, 3, 5, 4, 5, 6, 7 값을 초기 원소로 설정한 리스트에 remove(5)를 호출한 후 출력하는 예제 코드입니다. 리스트에는 5값을 갖는 원소가 두 개(인덱스 3과 인덱스 5)에 있는데 remove 메서드는 앞에 있는 원소 항목부터 제거하므로 인덱스 3에 있는 5를 제거합니다. 따라서 출력 결과는 1, 2, 3, 4, 5, 6, 7 입니다.

#리스트의 remove 멤버 메서드 사용
list1 = [1, 2, 3, 5, 4, 5, 6, 7 ]
print("list1:",list1)
list1.remove(5)
print("remove(5) 수행")
print("list1:",list1)
[그림 1] remove 멤버 메서드 사용
[그림 1] remove 멤버 메서드 사용
  • 인자를 전달하지 않고 pop 호출, 맨 뒤에 원소 제거 및 반환

리스트의 pop 멤버 메서드는 인자를 전달하지 않거나 인덱스를 전달할 수 있어요. 만약 인자를 전달하지 않으면 맨 뒤에 원소 항목을 제거하고 반환합니다.

다음 코드는 비어 있는 리스트를 생성한 후에 기능을 선택(추가, 삭제, 전체 보기)하여 원하는 기능을 수행하는 예제 코드입니다. 추가 기능에서는 정수 값을 입력 받아 순차 보관합니다. 삭제 기능에서는 맨 뒤에 원소를 제거하고 제거한 값을 출력합니다. 전체 보기 기능에서는 현재 리스트에 보관한 원소들을 보관합니다. 실제 동작하는 것은 스택처럼 LIFO(Last In First Out) 형태로 동작합니다.

#입력 인자 없이 pop 호출
#추가(순차 보관), 삭제(맨 뒤에 원소), 전체 보기
def Add(list1):
    value = input("추가할 정수:")
    list1.append(value)

def Delete(list1):
    if(len(list1)>0):
        value = list1.pop()
        print(value," 원소 삭제")
    else:
        print("원소 항목이 없습니다.")

def SelectMenu():
    print("i:추가 d:삭제 l:전체 보기 e:종료")
    key = input("선택>>")
    return key

list1 = list() #비어있는 리스트 생성
key = SelectMenu()
while(key != 'e'): #메뉴를 선택한 값이 'e'가 아니라면 반복
    if(key == 'i'):
        Add(list1)
    elif(key == 'd'):
        Delete(list1)
    elif(key == 'l'):
        print("전체 원소:",list1)
    else:
        print("잘못 선택하셨네요.",key)
    key = SelectMenu()
[그림 2] 추가, 삭제(입력 인자없이 pop호출), 전체보기
[그림 2] 추가, 삭제(입력 인자없이 pop호출), 전체보기
  • 삭제할 인덱스를 입력인자로 전달하여 pop 호출

리스트의 pop 멤버 메서드에 인덱스를 입력 인자로 전달하면 원하는 위치의 원소 항목을 제거할 수 있어요.

다음 코드는 비어 있는 리스트를 생성한 후에 기능을 선택(추가, 삭제, 전체 보기)하여 원하는 기능을 수행하는 예제 코드입니다. 추가 기능에서는 정수 값을 입력 받아 순차 보관합니다. 삭제 기능에서는 삭제할 원소의 순번을 전달받아 제거하고 값을 출력합니다. 전체 보기 기능에서는 현재 리스트에 보관한 원소들을 보관합니다.

#원하는 인덱스를 입력 인자로 전달하여 pop 호출
#추가(순차 보관), 삭제, 전체 보기
def Add(list1):
    value = input("추가할 정수:")
    list1.append(value)

def Delete(list1):
    if(len(list1)>0):
        print("삭제할 원소의 순번:1~",len(list1))
        i = int(input(">>"))
        if((i<1)or(i>len(list1))):
            print("순번을 잘못 입력하셨네요.")
            return
        value = list1.pop(i-1)
        print(value," 원소 삭제")
    else:
        print("원소 항목이 없습니다.")

def SelectMenu():
    print("i:추가 d:삭제 l:전체 보기 e:종료")
    key = input("선택>>")
    return key

list1 = list() #비어있는 리스트 생성
key = SelectMenu()
while(key != 'e'): #메뉴를 선택한 값이 'e'가 아니라면 반복
    if(key == 'i'):
        Add(list1)
    elif(key == 'd'):
        Delete(list1)
    elif(key == 'l'):
        print("전체 원소:",list1)
    else:
        print("잘못 선택하셨네요.",key)
    key = SelectMenu()
[그림 3] 추가, 삭제(인덱스 입력 인자로 전달하여 pop호출), 전체보기
[그림 3] 추가, 삭제(인덱스 입력 인자로 전달하여 pop호출), 전체보기
  • clear 멤버메서드를이용하여모든원소항목제거하기

Python의 리스트는 clear 멤버 메서드를 이용하여 모든 원소 항목을 제거할 수 있어요.

#clear 함수(멤버 메서드) 사용
list1 = [1,2,3,4,5]
print("리스트1:",list1)
list1.clear()
print("clear 메서드 호출!!!")
print("리스트1:",list1)
[그림 4] clear 함수 사용
[그림 4] clear 함수 사용

이번 강의는 다른 강의보다 소요 시간이 걸리네요. 아무래도 작지만 간단한 메뉴를 정하고 이에 맞는 기능을 정의하여 사용하는 형태를 지니고 있는 예제가 있어서 그런거예요.