Unit 20. 리스트와 튜플 응용하기
지금까지 리스트의 기본적인 사용 방법을 알아보았습니다. 파이썬의 리스트는 생각보다 기능이 많은데 값을 추가/삭제하거나, 정보를 조회하는 함수도 제공합니다. 특히 for 반복문과 결합하면 연속적이고 반복되는 값을 손쉽게 처리할 수 있습니다.
20.1 리스트 조작하기
먼저 리스트를 조작하는 메서드(method)입니다. 파이썬에서 제공하는 리스트 메서드는 여러 가지가 있지만 여기서는 자주 쓰는 메서드를 설명하겠습니다.
append(값)은 이름 그대로 리스트의 맨 뒤에 값을 추가합니다. 다음은 리스트 [10, 20]에 30을 추가하여 리스트는 [10, 20, 30]이 됩니다.
>>> a = [10, 20] >>> a.append(30) >>> a [10, 20, 30]
물론 빈 리스트에 값을 추가할 수도 있습니다.
>>> a = [] >>> a.append(10) >>> a [10]
append(리스트)처럼 리스트를 넣으면 리스트 안에 리스트가 들어갑니다. 다음은 리스트 안에 [50, 60]이 들어가서 중첩 리스트가 됩니다.
>>> a = [10, 20] >>> a.append([50, 60]) >>> a [10, 20, [50, 60]]
extend(리스트)는 리스트의 맨 뒤에 다른 리스트를 연결합니다. 다음은 리스트 [10]에 다른 리스트 [20, 30]을 연결하여 [10, 20, 30]이 됩니다.
>>> a = [10] >>> a.extend([20, 30]) >>> a [10, 20, 30]
insert(인덱스, 값)은 리스트의 특정 인덱스에 값을 추가합니다. 다음은 리스트 [10, 20, 30]의 인덱스 2에 500을 추가하여 [10, 20, 500, 30]이 됩니다.
- insert(0, 값): 리스트의 맨 처음에 값을 추가합니다.
- insert(len(리스트), 값): insert에 마지막 인덱스보다 큰 값을 지정하면 리스트의 맨 뒤에 값을 추가합니다. 여기서 len(리스트)는 마지막 인덱스보다 1이 더 크므로 리스트 맨 뒤에 값을 추가할 때는 주로 len(리스트)를 활용합니다.
>>> a = [10, 20, 30] >>> a.insert(2, 500) >>> a [10, 20, 500, 30]
remove(값)은 리스트에서 특정 값을 찾아서 삭제합니다. 이때 같은 값이 여러 개일 경우 처음 찾은 값을 삭제합니다. 다음은 리스트 [10, 20, 30]에서 20을 삭제하여 [10, 30]이 됩니다.
>>> a = [10, 20, 30] >>> a.remove(20) >>> a [10, 30]
pop()은 리스트의 마지막 값을 삭제한 뒤 삭제한 값을 반환합니다. pop(인덱스)처럼 pop에 인덱스를 지정하면 해당 인덱스의 값을 삭제한 뒤 삭제한 값을 반환합니다. 다음은 리스트 [10, 20, 30]에서 pop으로 마지막 값을 삭제한 뒤 30을 반환합니다. 따라서 리스트는 [10, 20]이 됩니다.
>>> a = [10, 20, 30] >>> a.pop() 30 >>> a [10, 20]
이번에는 리스트의 값 정보 구하기, 정렬, 뒤집기 메서드를 사용해보겠습니다.
index(값)은 리스트에서 특정 값의 인덱스를 구합니다. 이때 같은 값이 여러 개일 경우 처음 찾은 인덱스를 구합니다(가장 작은 인덱스). 다음은 20이 두 번째에 있으므로 인덱스 1이 나옵니다.
>>> a = [10, 20, 30, 10, 25, 40] >>> a.index(20) 1
count(값)은 리스트에서 특정 값의 개수를 구합니다. 다음은 리스트 [10, 20, 30, 10, 25, 40]에서 10의 개수를 구합니다. 여기서는 10이 두 개 들어있으므로 2가 나옵니다.
>>> a = [10, 20, 30, 10, 25, 40] >>> a.count(10) 2
reverse()는 리스트에서 값의 순서를 반대로 뒤집습니다. 다음은 리스트 [10, 20, 30, 10, 25, 40]의 순서를 반대로 뒤집어서 [40, 25, 10, 30, 20, 10]이 됩니다.
>>> a = [10, 20, 30, 10, 25, 40] >>> a.reverse() >>> a [40, 25, 10, 30, 20, 10]
sort()는 리스트의 값을 작은 순서대로 정렬(오름차순)합니다. 다음은 리스트 [10, 20, 30, 10, 25, 40]의 값을 작은 순서대로 정렬하여 [10, 10, 20, 25, 30, 40]이 됩니다.
- sort(reverse=True): 리스트의 값을 큰 순서대로 정렬(내림차순)합니다.
>>> a = [10, 20, 30, 10, 25, 40] >>> a.sort() >>> a [10, 10, 20, 25, 30, 40]
clear()는 리스트의 모든 값을 삭제합니다. 다음은 리스트 [10, 20, 30]의 값을 모두 삭제하여 빈리스트 []가 됩니다.
>>> a = [10, 20, 30] >>> a.clear() >>> a []
리스트는 메서드를 사용하지 않고, 인덱스로 범위를 지정하여 조작할 수도 있습니다. 다음은 리스트의 맨 뒤에 값이 한 개 들어있는 리스트를 추가합니다.
>>> a = [1, 2, 3] >>> a[len(a):] = [10] >>> a [1, 2, 3, 10]
a[len(a):]는 시작 인덱스를 len(a)로 지정해서 리스트의 마지막 인덱스보다 1이 더 큰 상태입니다. 즉, 그림과 같이 리스트의 맨 뒤부터 시작하겠다는 뜻입니다(이때는 리스트의 범위를 벗어난 인덱스를 사용할 수 있습니다).
a[len(a):] = [10]과 같이 값이 한 개 들어있는 리스트를 할당하면 리스트 a의 맨 뒤에 값이 한 개 추가되며 a.append(10)과 같습니다.
마찬가지로 a[len(a):] = [10, 20]과 같이 리스트를 할당하면 리스트 a의 맨 뒤에 다른 리스트를 연결하며 a.extend([10, 20])과 같습니다.
>>> a = [1, 2, 3] >>> a[len(a):] = [10, 20] >>> a [1, 2, 3, 10, 20]
리스트의 값을 삭제할 때는 del a[1]와 같이 del을 사용하여 특정 인덱스의 값을 삭제할 수 있습니다. 이때는 a.pop(1)과 같습니다.
>>> a = [10, 20, 30, 40, 50] >>> del a[1] >>> a [10, 30, 40, 50]
그리고 del a[1:4]처럼 시작 인덱스와 끝 인덱스를 지정하면 시작 인덱스부터 끝 인덱스 직전까지 삭제합니다. 여기서는 시작 인덱스가 1, 끝 인덱스가 4이므로 인덱스 1부터 3까지의 값을 삭제합니다(값 20, 30, 40 삭제).
>>> a = [10, 20, 30, 40, 50] >>> del a[1:4] >>> a [10, 50]
만약 del a[:]와 같이 시작, 끝 인덱스를 생략하면 리스트의 모든 값이 삭제됩니다. 이때는 a.clear()와 같습니다.
>>> a = [10, 20, 30, 40, 50] >>> del a[:] >>> a []