3.1 리스트(List) Last updated: 2023-10-24 17:44:16

집합 자료형은 여러개의 데이터를 한 번에 저장하고 관리하는 데이터형으로 각 요소는 앞에서 배운 정수, 실수, 문자열 등이 될 수 있고, 클래스 객체나 다른 집합 데이터가 될 수도 있다. 파이썬은 집합 데이터를 다룰 수 있는 편리한 기능들을 제공하고 포함할 수 있는 데이터의 종류도 더 유연한 장점을 가지고 있다.

3.1 리스트(List)

파이썬은 복합 유형의 값을 목록화 하는데 리스트(List)를 제공한다. 리스트에는 여러가지 유형의 데이터를 함께 목로고하 하여 관리할 수 있다. 데이터 유형에는 정수나 실수, 문자열 뿐만 아니라 클래스나 메서드도 함께 저장이 가능하다. 리스트를 작성하려면 대괄호([]) 사이에 항목을 쉼표로 구분하여 나열하면 된다. 리스트 객체 생성 형식은 다음과 같다.

형식

[value1, value2, value3, …]

파라미터

• value1, value2, value3 (object) : 리스트의 각 항목으로 문자열, 숫자형, 객체 등을 쉼표(,)로 구분하여 입력한다.

반환

(list) 나열한 객체(value1, value2, value3, …) 등이 나열된 리스트 객체를 반환한다.


3.1.1 리스트 생성

리스트를 생성하려면 대괄호(‘[]’)로 값의 배열을 감싸면 된다. 리스트를 생성하는 예시를 확인해보자.


A. 정수형 리스트 생성

다음은 정수형 리스트를 생성하는 예시이다.

[예제 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]


B. 실수형 리스트 생성

다음은 실수형 데이터를 이용한 리스트 생성 예시이다.

[예제 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]


C. 문자열 리스트 생성

문자열을 항목으로하는 리스트를 생성하는 방법에 대해 알아보자.

[예제 3- 76] 문자열 리스트 생성하기

a = ['apple', 'peach', 'banana']
print(a)

[결과]

['apple', 'peach', 'banana']


3.1.2 인덱스 자료형 다루기

리스트는 여러 항목이 순서대로 저장된 집합 데이터 구조이다. 파이썬의 집합 데이터 형식은 인덱스와 슬라이스를 사용할 수 있다.


A. 인덱스

인덱스는 집합 데이터에서 순서 번호인 인덱스를 이용해 데이터를 접근하는 방식이다. 인덱스를 사용하는데 알아야할 특성은 다음과 같다.

  • 번호는 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은 리스트형 변수이다.

• end index (int) : 종료 index, 리스트의 첫 번째 항목부터 end index 이전까지 항목을 반환한다.

반환

(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은 리스트형 변수이다.

• begin index (int) : 시작 index, 리스트 변수에서 begin index에 해당하는 항목부터 마지막 항목까지 반환

반환

(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


C. 리스트 덧셈 (+)

리스트 자료형은 서로 결합할 수 있다. 덧셈 연산을 통해 두 개의 리스트 연산을 결합한다.

[예제 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 리스트가 한 개의 항목으로 추가된다.



D. 리스트 곱셈 (*)

리스트에 정수를 곱하면 정수만큼 리스트를 생성한 후 모두 더하여 준다.

[예제 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]

리스트에 정수를 곱하면 정수만큼 리스트를 반복해 연결된 리스트를 생성한다.



E. 리스트 항목 값 수정

리스트는 문자열(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이다.



F. 리스트 항목 값 삭제

리스트에서 특정 항목을 삭제하려면 index를 지정하고 []를 대입하면 된다.

형식

list_var[begin index:end index] = []

파라미터

list_var은 리스트형 변수이다.

• begin index(int) : 리스트에서 삭제를 시작할 index
• end index(int) : 리스트에서 삭제할 마지막 index + 1

반환

(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 명령을 사용할 수도 있다.



G. 이중 배열 값 가져오기

리스트 안에는 리스트나 튜플과 같은 집합 데이터가 포함될 수 있다. 따라서, 이렇게 리스트 항목으로 집합 데이터가 포함된 경우 이중 배열로 접근해야 한다.

형식

list_var[first index][second index]

파라미터

list_var은 리스트형 변수이다.

• first index (int) : 첫 번째 차원의 index
• second index (int) : 두 번째 차원의 index

반환

(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을 사용하면 된다.