꼭 알아야 할 11가지 Python 목록 메서드

본 튜토리얼에서는 파이썬 리스트 메소드를 활용하여 리스트에 요소를 추가, 변경 및 제거하는 여러 방법에 대해 상세히 알아봅니다.

파이썬 프로그래밍을 시작할 때, 리스트는 가장 먼저 배우게 되는 기본 내장 데이터 구조 중 하나입니다. 앞으로 몇 분 동안, 파이썬 리스트의 핵심 내용을 간략히 복습하고, 리스트 작업을 할 때 유용하게 사용할 수 있는 다양한 리스트 메소드를 자세히 살펴보겠습니다.

자, 이제 시작해 볼까요!

파이썬 리스트 개요

파이썬에서 리스트는 동일하거나 상이한 데이터 유형의 항목들을 담을 수 있는 자료 구조입니다. for 루프와 같은 반복 구문을 사용하여 리스트 내의 항목들을 순회하고 접근할 수 있습니다.

모든 파이썬 이터러블과 마찬가지로, 리스트는 0부터 시작하는 인덱싱을 따르며, 슬라이싱 연산을 지원합니다.

가변적인 컬렉션이므로, 리스트는 제자리에서 수정될 수 있습니다. 이는 리스트에 요소를 추가 및 삭제하고, 특정 순서로 요소를 정렬하거나, 요소의 순서를 반전시키는 등의 작업을 포함합니다. 파이썬의 내장 리스트 메소드들은 이러한 작업들을 수행하는 데 매우 유용합니다.

다음 섹션에서는 몇 가지 실용적인 파이썬 리스트 메소드를 자세히 살펴보겠습니다.

파이썬의 내장 리스트 메소드

이 섹션에서는 여러 유용한 리스트 메소드들을 학습합니다. 각 메소드가 실제로 어떻게 작동하는지 확인하기 위해 코드 예제를 함께 실행해 보겠습니다.

먼저, pgm_langs 라는 리스트를 사용하겠습니다. 이 리스트는 인기 있는 프로그래밍 언어의 이름을 담은 문자열 리스트입니다.

pgm_langs = ['Python','Go','Rust','JavaScript']

insert() 메소드로 리스트 항목 삽입하기

특정 인덱스 위치에 요소를 삽입할 수 있습니다. 이를 위해 insert() 메소드를 사용할 수 있습니다. insert() 리스트 메소드 호출 시에는 다음 두 가지 매개변수를 전달해야 합니다.

  • 요소가 삽입되어야 할 인덱스 위치
  • 삽입할 요소

insert() 메소드를 사용하여 인덱스 1 위치에 ‘Scala’를 삽입해 보겠습니다.

pgm_langs = ['Python','Go','Rust','JavaScript']
pgm_langs.insert(1,'Scala')
print(pgm_langs)
# 출력 결과: ['Python', 'Scala', 'Go', 'Rust', 'JavaScript']

append() 메소드를 사용하여 리스트에 항목 추가하기

리스트의 끝에 요소를 추가해야 할 때가 있습니다. 이럴 때에는 append() 메소드를 사용하면 됩니다.

append() 메소드를 사용하여 리스트 끝에 문자열 ‘Java’를 추가해 보겠습니다.

pgm_langs.append('Java')
print(pgm_langs)
# 출력 결과: ['Python', 'Scala', 'Go', 'Rust', 'JavaScript', 'Java']

extend() 메소드로 여러 개의 항목 추가하기

append() 메소드를 사용하여 단일 항목을 추가할 수 있다는 것을 알고 있습니다. 그렇다면 여러 항목, 예를 들어 다른 리스트의 항목들을 기존 리스트에 추가하려면 어떻게 해야 할까요? extend() 메소드는 이를 위한 편리한 구문을 제공합니다.

extend() 메소드를 사용하여 more_langs 리스트의 요소들을 pgm_langs 리스트에 추가해 보겠습니다.

more_langs = ['C++','C#','C']
pgm_langs.extend(more_langs)
print(pgm_langs)
# 출력 결과: ['Python', 'Scala', 'Go', 'Rust', 'JavaScript', 'Java', 'C++', 'C#', 'C']

항목 리스트를 순회하면서 append() 메소드를 사용하여 한 번에 하나의 항목을 추가할 수도 있습니다. 그러나 이것은 코드가 길어지고 번거롭습니다. extend() 메소드를 사용하는 것이 훨씬 더 편리합니다.

for lang in more_langs:
    pgm_langs.append(lang)

reverse() 메소드를 사용하여 리스트 반전하기

리스트 내 요소들의 순서를 반전시키려면 간단히 reverse() 메소드를 호출하면 됩니다.

pgm_langs 리스트가 제자리에서 반전된 것을 확인할 수 있습니다.

pgm_langs.reverse()
print(pgm_langs)
# 출력 결과: ['C', 'C#', 'C++', 'Java', 'JavaScript', 'Rust', 'Go', 'Scala', 'Python']

sort() 메소드를 사용하여 리스트 정렬하기

sort() 메소드를 사용하여 파이썬 리스트를 제자리에서 정렬할 수 있습니다. pgm_langs는 문자열 리스트이므로 알파벳 순으로 정렬되는 것을 볼 수 있습니다.

pgm_langs.sort()
print(pgm_langs)
# 출력 결과: ['C', 'C#', 'C++', 'Go', 'Java', 'JavaScript', 'Python', 'Rust', 'Scala']

알파벳 역순으로 리스트를 정렬하려면 sort() 메소드 호출 시 reverse 매개변수를 True로 설정하면 됩니다.

pgm_langs.sort(reverse=True)
print(pgm_langs)
# 출력 결과: ['Scala', 'Rust', 'Python', 'JavaScript', 'Java', 'Go', 'C++', 'C#', 'C']

파이썬 리스트 정렬에 대해 더 자세히 알아보세요.

copy() 메소드로 얕은 복사본 만들기

때로는 원본 리스트 자체를 수정하는 대신 원본 리스트의 복사본을 수정하는 것이 유용할 수 있습니다. 리스트 메소드 copy()는 파이썬 리스트의 얕은 복사본을 반환합니다.

pgm_langs 리스트의 얕은 복사본을 만들고 이름을 pgm_langs_copy로 지정하겠습니다. 그런 다음 이 복사본의 첫 번째 요소를 ‘Haskell’로 설정하고 출력합니다.

pgm_langs_copy = pgm_langs.copy()
pgm_langs_copy[0]='Haskell'
print(pgm_langs_copy)
# 출력 결과: ['Haskell', 'Rust', 'Python', 'JavaScript', 'Java', 'Go', 'C++', 'C#', 'C']

하지만 pgm_langs 리스트는 수정되지 않은 것을 볼 수 있습니다. 따라서 단순 복사본을 만들고 수정해도 원본 리스트에는 영향을 주지 않습니다.

print(pgm_langs)
# 출력 결과: ['Scala', 'Rust', 'Python', 'JavaScript', 'Java', 'Go', 'C++', 'C#', 'C']

count() 메소드로 항목 개수 가져오기

때로는 특정 요소가 리스트에 몇 번 나타나는지 알아야 할 때가 있습니다. count() 메소드는 리스트에서 요소가 나타나는 횟수를 반환합니다.

pgm_langs 리스트에서 모든 요소는 정확히 한 번 발생합니다. 따라서 ‘Go’의 개수를 구하려고 하면 1을 얻게 됩니다.

print(pgm_langs.count('Go'))
# 출력 결과: 1

count() 메소드를 사용하는 것은 파이썬 리스트에서 중복 항목을 제거하는 한 가지 방법이 될 수 있습니다.

index() 메소드를 사용하여 항목의 인덱스 가져오기

파이썬 리스트에서 항목의 인덱스를 찾으려면 index() 메소드를 사용할 수 있습니다. 예를 들어 pgm_langs 리스트에서 ‘C#’의 인덱스를 찾고 싶다고 가정해 봅시다. assert 문을 사용하여 인덱스 7의 요소가 실제로 ‘C#’인지 확인할 수 있습니다.

print(pgm_langs.index('C#'))
# 출력 결과: 7
assert pgm_langs[7] == 'C#'

pop() 메소드를 사용하여 인덱스에서 항목 제거하기

이제 파이썬 리스트에서 요소를 제거하는 리스트 메소드들을 살펴보겠습니다. pop() 메소드는 특정 인덱스에서 요소를 제거하고 제거된 요소를 반환하는 데 사용됩니다. 이전 코드 예제에서 ‘C#’이 인덱스 7에 있는 언어임을 확인했습니다.

인덱스가 7인 pgm_langs 리스트에서 pop() 메소드를 호출하면 인덱스 7의 요소인 ‘C#’을 반환하고 리스트에서 제거하는 것을 확인할 수 있습니다.

print(pgm_langs.pop(7))
# 출력 결과: 'C#'
print(pgm_langs)
# 출력 결과: ['Scala', 'Rust', 'Python', 'JavaScript', 'Java', 'Go', 'C++', 'C']

따라서 pop() 메소드는 지정된 인덱스에서 요소를 제거하고 반환합니다. 하지만 인덱스 지정은 선택 사항입니다. 인덱스를 지정하지 않으면 pop() 메소드는 파이썬 리스트의 마지막 요소를 제거하고 반환합니다.

print(pgm_langs.pop())
# 출력 결과: 'C'
print(pgm_langs)
# 출력 결과: ['Scala', 'Rust', 'Python', 'JavaScript', 'Java', 'Go', 'C++']

remove() 메소드로 항목 제거하기

때로는 제거할 요소는 알지만 해당 인덱스는 모를 수 있습니다. 이 경우 제거할 요소를 전달하여 제거하는 remove() 메소드를 사용할 수 있습니다. 그림과 같이 remove() 메소드를 사용하여 pgm_langs 리스트에서 ‘Java’를 제거해 보겠습니다.

pgm_langs.remove('Java')
print(pgm_langs)
# 출력 결과: ['Scala', 'Rust', 'Python', 'JavaScript', 'Go', 'C++']

clear() 메소드로 모든 항목 제거하기

파이썬 리스트에서 모든 항목을 제거하려면 어떻게 해야 할까요? 리스트를 순회하면서 remove() 메소드를 사용하여 각 요소를 제거할 수 있습니다.

for lang in pgm_langs:
    pgm_langs.remove(lang)

하지만 더 좋은 방법이 있을까요? 네, clear() 메소드를 사용하면 됩니다. pgm_langs 리스트에서 clear() 메소드를 호출하면 모든 요소가 제거되고 pgm_langs는 빈 리스트가 됩니다.

pgm_langs.clear()
print(pgm_langs)
# 출력 결과: []

파이썬 리스트 메소드 요약

다양한 리스트 메소드와 구문을 빠르게 요약해 보겠습니다.

리스트 메소드 구문 설명
insert() list1.insert(index, elt) list1의 지정된 index 위치에 elt를 삽입합니다.
append() list1.append(elt) list1의 끝에 elt를 추가합니다.
extend() list1.extend(iterable) list1의 끝에 iterable의 모든 항목을 추가합니다.
sort() list1.sort() list1을 제자리에서 정렬합니다.
reverse() list1.reverse() list1을 제자리에서 반전합니다.
copy() list1.copy() list1의 얕은 복사본을 반환합니다.
count() list1.count(elt) list1에서 elt가 나타나는 횟수를 반환합니다.
index() list1.index(elt) list1에서 elt의 인덱스를 반환합니다.
pop() list1.pop(index) index 위치의 요소를 제거하고 반환합니다.
remove() list1.remove(elt) list1에서 elt를 제거합니다.
clear() list1.clear() list1에서 모든 요소를 제거합니다.

결론

이 튜토리얼이 파이썬에서 가장 일반적으로 사용되는 리스트 메소드를 이해하는 데 도움이 되었기를 바랍니다. 다음 단계로 파이썬 튜플과 파이썬에서 리스트와 튜플의 차이점에 대해 학습해 보세요.

파이썬을 배우는 중이라면, 초보자에게 친숙한 학습 자료 목록을 확인해 보는 것도 좋습니다.