리스트(list)란 뭘까요?  사전적 의미는 ‘목록’이며, 파이썬에서 리스트의 의미는 여러 가지 자료를 저장할 수 있는 자료입니다. ‘자료를 저장할 수 있는 자료’라니… 이게 뭔소리야; 할 수도 있는데 숫자나 문자, 수식 등이 개별적인, 독립적인 ‘자료’였다면 리스트는 이러한 자료들을 모아서 사용할 수 있게 해주는 특별한 형태의 자료를 말합니다.

 

*자료(data)란? 프로그래밍에서 프로그램이 처리할 수 있는 모든 것
*자료형(data type)이란? 개발자들이 쉽게 사용할 수 있도록 기능과 역할에 따라서 자료를 구분한 것.

  • 문자열(string): 메일, 제목, 메시지 내용 등. 예) “안녕하세요”, “Hello World”
  • 숫자(number): 물건의 가격, 학생의 성적 등. 예) 52, 273, 103.32
  • 불(boolean): 친구의 로그인 상태 등. 예) True, False

 

다음 코드는 여섯 개의 자료를 가진 리스트를 선언한 예입니다. 리스트는 대괄호[] 내부에 여러 종류의 자료를 넣어 선언합니다. 선언한 리스트를 출력하면 내부의 자료를 모두 출력합니다.

>>> array=[273, 32, 103, "문자열", True, False]
>>> print(array)
[273, 32, 103, '문자열', True, False]

 

 


✅리스트 선언하고 요소에 접근하기

파이썬에서 리스트를 생성하는 방법은 다음과 같이 대괄호[]에 자료를 쉼표로 구분해서 입력합니다. 대괄호[] 내부에 넣는 자료를 요소라고 하고 영어로는 element라고 부릅니다. 두 가지 모두 자주 언급되는 용어라서 기억해두면 좋습니다.

[요소, 요소, 요소…]

 

그럼 간단하게 리스트를 생성해 보겠습니다. 리스트는 한 가지 자료형만으로 구성할 수도 있고, 여러 종류의 자료형으로 구성할 수도 있습니다. 프롬프트에 리스트를 입력하면 리스트 내부의 자료를 모두 출력하는 모습을 볼 수 있습니다.

>>> [1, 2, 3, 4]                            #숫자만으로 구성된 리스트
[1, 2, 3, 4]
>>> ["안", "녕", "하", "세", "요"]           #문자열만으로 구성된 리스트
['안', '녕', '하', '세', '요']
>>> [273, 32, 103, "문자열", True, False]    #여러 자료형으로 구성된 리스트
[273, 32, 103, '문자열', True, False]

 

리스트 안에 있는 요소를 각각 사용하려면 리스트 이름 바로 뒤에 대괄호[]를 입력하고, 자료의 위치를 나타내는 숫자를 입력합니다.
다음과 같이 리스트를 선언했다면,

list_a=[273, 32, 103, "문자열", True, False]

 

각각의 요소는 다음과 같은 형태로 저장되는데, 일반적으로 현실에서는 숫자를 1부터 세지만, 파이썬은 0부터 셉니다. 각 요소가 들어 있는 위치는 다음과 같습니다.

list_a 273 32 103 문자열 True False
[0] [1] [2] [3] [4] [5]

 

이때 리스트 기호인 대괄호[] 안에 들어간 숫자를 인덱스(index)라고 부릅니다. ‘요소’와 ‘인덱스’라는 이름을 꼭 기억해 주세요. 앞으로 자주 사용하게 되는 용어입니다.

>>> list_a=[273, 32, 103, "문자열", True, False]
>>> list_a[0]
273
>>> list_a[1]
32
>>> list_a[2]
103
>>> list_a[1:3]
[32, 103]

 

list_a[1:3]의 [1:3]은 첫 번째 글자부터 세 번째 글자를 선택하는 것이 아니라 그 앞에 숫자, 두 번째 글자까지 선택합니다. 그래서 결과는 [32, 103]이 출력됩니다.

 

리스트의 특정 요소는 변경할 수도 있습니다. 다음과 같이 입력하면 “변경”이라는 문자열을 0번째에 대입하면서 요소를 변경하고 있습니다.

>>> list_a=[273, 32, 103, "문자열", True, False]
>>> list_a[0]="변경"
>>> list_a
['변경', 32, 103, '문자열', True, False]
list_a 변경 32 103 문자열 True False
[0] [1] [2] [3] [4] [5]

 

리스트는 위와 같은 일반적인 사용법 외에도 다양하게 사용할 수 있는 방법이 많습니다.

 

 

☑️첫째, 대괄호 안에 음수를 넣어 뒤에서부터 요소를 선택할 수 있습니다.

 리스트는 대괄호 안에 음수를 넣어 뒤에서부터 요소를 선택할 수 있습니다.

>>> list_a=[273, 32, 103, "문자열", True, False]
>>> list_a[-1]
False
>>> list_a[-2]
True
>>> list_a[-3]
'문자열'
273 32 103 문자열 True False
[-6] [-5] [-4] [-3] [-2] [-1]

 

 

☑️둘째, 리스트 접근 연산자를 다음과 같이 이중으로 사용할 수 있습니다.

아래와 같은 리스트가 있다고 할 때 list_a[3]을 지정하면 “문자열”을 꺼내오고 list_a[3][0]을 지정하면 세 번째에서 가져온 “문자열”에서 다시 0번째를 가져와 출력합니다.

>>> list_a=[273, 32, 103, "문자열", True, False]
>>> list_a[3]
'문자열'
>>> list_a[3][0]
'문'

 

 

☑️셋째, 리스트 안에 리스트를 사용할 수도 있습니다.

아래와 같이 기술하면 list_a는 리스트 세 개를 가지는 리스트로 만들어집니다.

>>> list_a=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list_a[1]
[4, 5, 6]
>>> list_a[1][1]
5

 

 

❗리스트에서의 IndexError 예외

IndexError 예외는 리스트의 길이를 넘는 인덱스로 요소에 접근하려고 할 때 발생하는 예외입니다. 요소가 존재하지 않는 위치에서 요소를 꺼내려고 하니 예외가 발생하는 것입니다. 다음 코드를 실행하면, 리스트에 [3]번째 요소가 없으므로 아래와 같이 IndexError 예외가 발생합니다.

>>> list_a=[273, 32, 103]
>>> list_a[3]

*오류)

Traceback (most recent call last):
    File “<pyshell#3>”, line 1, in <module>
IndexError: list index out of range

 

 


 

✅리스트 연산하기: 연결(+), 반복(*), len()

문자열에 적용할 수 있는 연산자는 리스트에서도 활용할 수 있습니다. 문자열과 리스트는 굉장히 비슷한 자료형으로, 사용할 수 있는 연산자와 함수도 비슷합니다. 리스트 연산자를 손코딩으로 살펴보겠습니다.

#리스트를 선언합니다.
list_a=[1, 2, 3]
list_b=[4, 5, 6]

#출력합니다.
print("#리스트")
print("list_a=", list_a)
print("list_b=", list_b)
print()

#기본 연산자
print("#리스트 기본 연산자")
print("list_a + list_b=", list_a + list_b)
print("list_a * 3=", list_a * 3)
print()

#함수
print("#길이 구하기")
print("len(list_a)=", len(list_a))

 

*실행 결과)

#리스트
list_a=[1, 2, 3]
list_b=[4, 5, 6]

#리스트 기본 연산자
list_a + list_b=[1, 2, 3, 4, 5, 6]
list_a * 3=[1, 2, 3, 1, 2, 3, 1, 2, 3]

#길이 구하기
len(list_a)=3

 

 

2행과 3행은 list_a와 list_b에 리스트를 선언합니다.

list_a=[1, 2, 3]
list_b=[4, 5, 6]

 

7행과 8행은 선언된 리스트를 출력하고,

print("list_a=", list_a)    → list_a=[1, 2, 3]
print("list_b=", list_b)    → list_b=[4, 5, 6]

 

그런 다음 13행에서는 문자열 연결 연산자 +를 사용해 list_a와 list_b의 자료를 연결합니다. 14행에서는 문자열 반복 연산자 *를 사용해 list_a의 자료를 3번 반복합니다.

print("list_a + list_b=", list_a + list_b)    → [1, 2, 3, 4, 5, 6]
print("list_a * 3=", list_a * 3)              → [1, 2, 3, 1, 2, 3, 1, 2, 3]

 

len() 함수는 괄호 내부에 문자열을 넣으면 문자열의 글자 수(=길이)를 세어 주지만, 리스트 변수를 넣으면 요소의 개수를 세어 줍니다. 19행은 list_a에 들어있는 요소의 개수를 구합니다.

print("len(list_a)=", len(list_a))    → len(list_a)=3

문자열에 연산자를 적용할 때와 비슷한 결과를 출력하므로 쉽게 이해할 수 있을 거예요.

 

 

 


혼자 공부하는 파이썬(개정판)

‘리스트에 요소를 추가하는 append(), insert() / 리스트에서 요소 제거 / 리스트를 정렬하는 sort() / 리스트 내부에 있는지 확인하는 in, not in 연산자 / for 반복문 / 중첩 리스트와 중첩 반복문’은 『혼자 공부하는 파이썬(개정판)』에서 확인하실 수 있습니다.

👀 도서 자세히 보기
✍️ 유튜브 강의 바로가기