3.1 리스트(List) Last updated: 2023-10-24 17:44:16
집합 자료형은 여러개의 데이터를 한 번에 저장하고 관리하는 데이터형으로 각 요소는 앞에서 배운 정수, 실수, 문자열 등이 될 수 있고, 클래스 객체나 다른 집합 데이터가 될 수도 있다. 파이썬은 집합 데이터를 다룰 수 있는 편리한 기능들을 제공하고 포함할 수 있는 데이터의 종류도 더 유연한 장점을 가지고 있다.
집합 자료형은 여러개의 데이터를 한 번에 저장하고 관리하는 데이터형으로 각 요소는 앞에서 배운 정수, 실수, 문자열 등이 될 수 있고, 클래스 객체나 다른 집합 데이터가 될 수도 있다. 파이썬은 집합 데이터를 다룰 수 있는 편리한 기능들을 제공하고 포함할 수 있는 데이터의 종류도 더 유연한 장점을 가지고 있다.
파이썬은 복합 유형의 값을 목록화 하는데 리스트(List)를 제공한다. 리스트에는 여러가지 유형의 데이터를 함께 목로고하 하여 관리할 수 있다. 데이터 유형에는 정수나 실수, 문자열 뿐만 아니라 클래스나 메서드도 함께 저장이 가능하다. 리스트를 작성하려면 대괄호([]) 사이에 항목을 쉼표로 구분하여 나열하면 된다. 리스트 객체 생성 형식은 다음과 같다.
형식 | [value1, value2, value3, …] |
---|---|
파라미터 | • value1, value2, value3 (object) : 리스트의 각 항목으로 문자열, 숫자형, 객체 등을 쉼표(,)로 구분하여 입력한다. |
반환 | (list) 나열한 객체(value1, value2, value3, …) 등이 나열된 리스트 객체를 반환한다. |
리스트를 생성하려면 대괄호(‘[]’)로 값의 배열을 감싸면 된다. 리스트를 생성하는 예시를 확인해보자.
다음은 정수형 리스트를 생성하는 예시이다.
[예제 3- 74] 정수 리스트 생성하기
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a)
[결과]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
다음은 실수형 데이터를 이용한 리스트 생성 예시이다.
[예제 3- 75] 실수 리스트 생성하기
a = [1.0, 2.1, 3.3, 4.5, 5.1, 6.3, 7.8, 8.6, 9.7, 10.6]
print(a)
[결과]
[1.0, 2.1, 3.3, 4.5, 5.1, 6.3, 7.8, 8.6, 9.7, 10.6]
문자열을 항목으로하는 리스트를 생성하는 방법에 대해 알아보자.
[예제 3- 76] 문자열 리스트 생성하기
a = ['apple', 'peach', 'banana']
print(a)
[결과]
['apple', 'peach', 'banana']
리스트는 여러 항목이 순서대로 저장된 집합 데이터 구조이다. 파이썬의 집합 데이터 형식은 인덱스와 슬라이스를 사용할 수 있다.
인덱스는 집합 데이터에서 순서 번호인 인덱스를 이용해 데이터를 접근하는 방식이다. 인덱스를 사용하는데 알아야할 특성은 다음과 같다.
번호는 0부터 시작한다.
음수(-)는 맨 뒤에서부터 역순을 의미하고 -1은 마지막 인덱스를 가리킨다. -2는 끝에서 두 번째 항목을 가리킨다.
인덱스를 지정하지 않으면 위치에 따라 처음 혹은 마지막 인덱스를 가리킨다. [:-1]인 경우 처음부터 마지막(-1) 까지의 항목을 가리키고, [5:]인 경우는 5 번째부터 마지막 까지의 항목을 가리킨다.
인덱스를 사용하는 예시를 알아보자.
■ 단일 항목 값 얻어오기
리스트의 첫 번째 항목을 가져오기 위한 인덱스는 0이다. 리스트는 0번부터 시작한다.
[예제 3- 77] 첫 번째 항목 얻어오기
# [1] 첫 번째 항목 값을 가져온다.
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[0]
[결과]
10
리스트의 두 번째 항목의 인덱스는 1이다.
[예제 3- 78] 두 번째 항목 얻어오기
# [2] 두 번째 항목 값을 가져온다.
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[1]
[결과]
20
리스트에서 맨 마지막 번째 항목을 가져오기 위한 인덱스는 -1이다. 파이썬은 리스트형 자료를 뒤에서부터 가져올 수 있는 인덱스를 제공한다.
[예제 3- 79] 리스트의 마지막 항목 얻어오기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[-1]
[결과]
80
리스트에서 마지막 항목 값을 가져오려면 인덱스 값을 -1을 사용하면 된다.
[예제 3- 80] 리스트의 뒤에서 두 번째 항목 얻어오기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[-2]
[결과]
70
리스트에서 끝에서 두 번째 항목 값을 가져오려면 인덱스를 -2를 주면 된다.
[예제 3- 81] 리스트에서 마지막 3개 항목 얻어오기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[-3:]
[결과]
[60, 70, 80]
리스트에서 마지막 3개 항목 값을 가져오려면 시작 인덱스를 -3으로하고 끝나는 인덱스는 지정하지 않으면 된다.
■ 처음부터 여러 항목 값 얻어오기
리스트나 문자열에서 시작부터 중간까지 항목을 얻어오는 방법에 대해 알아보자.
형식 | list_var[:end index] |
---|---|
파라미터 | list_var은 리스트형 변수이다. |
반환 | (object) 반환된 리스트 객체 |
[예제 3- 82] 리스트에서 0 번째부터 n개 항목 가져오기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[0:4]
[결과]
[10, 20, 30, 40]
리스트에서 처음부터 4번째의 값을 가져온다. 첫 번째 항목의 index는 0이고, 4번째의 index는 3이다. 4번째 값까지 가져오려면 다음 index인 5번째의 4를 입력해야한다.
[예제 3- 83] 리스트에서 처음부터 n개 항목 가져오기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[:4]
[결과]
[10, 20, 30, 40]
리스트에서 처음부터 4번째의 값을 가져온다. 시작 index가 첫 번째 인덱스 이므로 지정하지 않아도 된다.
■ 중간부터 마지막 까지의 항목 값 얻어오기
리스트나 문자열에서 중간부터 끝까지 항목을 얻어오는 방법에 대해 알아보자.
형식 | list_var[begin index:] |
---|---|
파라미터 | list_var은 리스트형 변수이다. |
반환 | (object) 반환된 리스트 객체 |
[예제 3- 84] 리스트에서 중간부터 나머지 항목 가져오기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[3:]
[결과]
[40, 50, 60, 70, 80]
리스트에서 4 번째부터 나머지 항목을 가져온다. 시작 index 3을 지정하고, 끝나는 인덱스는 지정하지 않아도 된다.
[예제 3- 85] 리스트에서 중간부터 마지막 항목까지 가져오기
a[3:9]
[결과]
[40, 50, 60, 70, 80]
리스트에서 마지막 index를 -1로 지정하면 마지막 항목까지 가져온다. 마지막 index(7) 보다 더 큰 값을 입력하면 마지막 까지 값을 가져온다.
■ 중간의 여러 개 값 얻어오기
[예제 3- 86] 리스트에서 중간의 n개 항목 가져오기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[2:5]
[결과]
[30, 40, 50]
리스트에서 3 번째부터 5번째 까지의 값 가져온다.
■ 전체 항목 값 얻어오기
[예제 3- 87] 리스트 전체 항목 가져오기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[:]
[결과]
[10, 20, 30, 40, 50, 60, 70, 80]
리스트에서 시작과 끝 index를 지정하지 않으면 전체 항목 값을 가져온다.
B. 리스트 길이 알아내기
파이썬에서 리스트의 길이를 알아내는 방법은 len( ) 메서드를 사용하는 것이다. len( ) 메서드는 리스트나, 튜플, 문자열 같이 길이를 갖는 집합 데이터 형식에 대부분 사용이 가능하다.
다음은 리스트 길이를 출력하는 예제이다.
[예제 3- 88] 리스트의 길이 구하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
len(a)
[결과]
8
다음은 리스트를 이용해 for 반복문을 실행하는 방법에 대한 예제이다.
[예제 3- 89] 리스트 길이를 이용해 for 문을 반복하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
# len() 메서드를 이용해 길이 만큼 반복문을 실행한다.
# i 변수에는 0~7의 배열 index 값이 들어 있다.
for i in range(len(a)):
print(f"{i} 번째 값:", a[i])
[결과]
0 번째 값: 10
1 번째 값: 20
2 번째 값: 30
3 번째 값: 40
4 번째 값: 50
5 번째 값: 60
6 번째 값: 70
7 번째 값: 80
[예제 3- 90] 리스트 값으로 for 반복문 실행하기
# 리스트를 이용해 반복문 실행한다.
# i에는 리스트에 포함된 각 항목이 들어 있다.
# 단, 값을 직접 가져오므로 index는 알 수 없다.
for i in a:
print(f"값:", i)
[결과]
값: 10
값: 20
값: 30
값: 40
값: 50
값: 60
값: 70
값: 80
[예제 3- 91] enumerate이용해 리스트의 for문 반복하기
# enumerate를 이용해 index를 만들어 값과 함께 반복문을 실행한다.
# 그러면 index 값도 함께 받아올 수 있다.
for i, _a in enumerate(a):
print(f"{i} 번째 값:", _a)
[결과]
0 번째 값: 10
1 번째 값: 20
2 번째 값: 30
3 번째 값: 40
4 번째 값: 50
5 번째 값: 60
6 번째 값: 70
7 번째 값: 80
리스트 자료형은 서로 결합할 수 있다. 덧셈 연산을 통해 두 개의 리스트 연산을 결합한다.
[예제 3- 92] 리스트 덧셈 연산하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
b = ['a', 'b', 'c', 'd']
a + b
[결과]
[10, 20, 30, 40, 50, 60, 70, 80, 'a', 'b', 'c', 'd']
두 개의 리스트를 덧셈 연산하면 한 개의 긴 리스트가 반환된다.
[예제 3- 93] 리스트 순서에 따른 덧셈 연산하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
b = ['a', 'b', 'c', 'd']
b + a
[결과]
['a', 'b', 'c', 'd', 10, 20, 30, 40, 50, 60, 70, 80]
리스트 연산에서 덧셈은 순서가 중요하다.
[예제 3- 94] 리스트와 정수 덧셈 연산하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a + 90
[결과]
TypeError: can only concatenate list (not "int") to list
리스트와 정수는 덧셈을 할 수 없다.
[예제 3- 95] 리스트에 항목 추가하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a + [90]
[결과]
[10, 20, 30, 40, 50, 60, 70, 80, 90]
리스트에 정수 항목 한 개를 추가하려면 리스트를 만들어서 더해주어야 한다.
리스트에 항목을 하나 추가할 때는 append( ) 메서드를 사용할 수도 있다. 단, 항목을 한 개씩 추가하기 때문에 리스트를 추가해도 한 개이다.
[예제 3- 96] append( ) 메서드 이용해 리스트에 항목 추가하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
b = ['a', 'b', 'c', 'd']
a.append(b[0])
a
[결과]
[10, 20, 30, 40, 50, 60, 70, 80, 'a']
리스트 a에 리스트 b의 첫 번째 항목 한개를 append( ) 메서드를 이용해 추가한다.
[예제 3- 97] 리스트에 리스트를 항목으로 추가하기
a.append(b)
a
[결과]
[10, 20, 30, 40, 50, 60, 70, 80, 'a', ['a', 'b', 'c', 'd']]
리스트 a에 리스트 b를 모두 추가하면 마지막에 b 리스트가 한 개의 항목으로 추가된다.
리스트에 정수를 곱하면 정수만큼 리스트를 생성한 후 모두 더하여 준다.
[예제 3- 98] 리스트 반복생성하기
a = [10, 20, 30, 40, 50]
a * 3
[결과]
[10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
리스트에 정수를 곱하면 정수만큼 리스트를 반복해 연결된 리스트를 생성한다.
리스트는 문자열(string)과 다르게 변경 가능(mutable)한다. 따라서 특정 index의 값을 수정할 수 있다.
[예제 3- 99] 리스트의 항목 값 수정하기
a = [10, 20, 3, 40, 50]
a[2] = 30
a
[결과]
[10, 20, 30, 40, 50]
리스트의 3번째 항목 값인 3을 30으로 변경한다. 3 번째 항목의 index는 2이다.
리스트에서 특정 항목을 삭제하려면 index를 지정하고 []를 대입하면 된다.
형식 | list_var[begin index:end index] = [] |
---|---|
파라미터 | list_var은 리스트형 변수이다. |
반환 | (object) 반환된 리스트 객체 |
[예제 3- 100] 리스트의 중간 n개 항목을 삭제하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
a[2:4] = []
a
[결과]
[10, 20, 50, 60, 70, 80]
리스트에서 3번째 ~ 4번째 항목을 삭제한다.
[예제 3- 101] del 명령으로 리스트 항목 삭제하기
a = [10, 20, 30, 40, 50, 60, 70, 80]
del a[2:4]
a
[결과]
[10, 20, 50, 60, 70, 80]
리스트에서 항목을 삭제할 때 del 명령을 사용할 수도 있다.
리스트 안에는 리스트나 튜플과 같은 집합 데이터가 포함될 수 있다. 따라서, 이렇게 리스트 항목으로 집합 데이터가 포함된 경우 이중 배열로 접근해야 한다.
형식 | list_var[first index][second index] |
---|---|
파라미터 | list_var은 리스트형 변수이다. |
반환 | (object) 2개 차원의 index에 해당하는 리스트의 값 혹은 객체를 반환한다. |
[예제 3- 102] 리스트에 항목으로 리스트를 추가하기
a = [1,2,3,4,5]
b = ['a', 'b', 'c', 'd']
a.append(b)
print(a)
[결과]
[1, 2, 3, 4, 5, ['a', 'b', 'c', 'd']]
Append( ) 메서드를 이용해 리스트 a 맨 뒤에 리스트 b 추가해 이중 배열을 생성한다.
[예제 3- 103] 이중 배열 값 가져오기
a = [1,2,3,4,5]
b = ['a', 'b', 'c', 'd']
a.append(b)
print(a[5][1])
[결과]
b
index 5에 해당하는 리스트 b중에서 두 번째인 b 값을 가져온다. 이중 배열에서는 인덱스 기호인 []를 두 번 연속해서 [][]와 같이 사용하면 된다.
[예제 3- 104] 마지막 항목 인덱스로 이중 배열 값 가져오기
print(a[-1][1])
[결과]
b
이중 배열이라도 마지막 항목을 가져오려면 인덱스로 -1을 사용하면 된다.