Skip to Main Content

파이썬 기초 가이드: 리스트와 딕셔너리

코딩 학습 가이드는 소프트웨어학과 송오영교수님이 검수하였습니다.

리스트

리스트는 아주 유용한 자료 저장 수단입니다.

리스트는 하나씩 사용하던 변수를 한 줄로 붙여놓은 것과 같은 개념입니다.

지금까지는 변수의 이름을 각각 a, b, c, d 이런 식으로 지정했지만, 리스트는 변수를 한 줄로 붙인 뒤에 박스 전체의 이름(a)을 지정합니다.
그리고 각각은 a[0], a[1], a[2], a[3]과 같이 번호를 붙여서 사용합니다.

리스트 사용하기

리스트는 요소들을 모아둔 것입니다.
빈 리스트를 만들 때는 [ ](대괄호)만 지정하거나 list()를 사용하면 됩니다.
변수에 값을 저장할 때 [ ]로 묶어주면 리스트가 되며, 각 값은 ,(콤마)로 구분해줍니다.

형식

리스트 = [ ]
리스트 = list()

형식

리스트 = [값, 값, 값, ]

리스트에 저장된 각 값을 요소라고 합니다. 요소에 접근할 때는 리스트 뒤에 [ ] (대괄호)를 사용하며 [ ] 안에 각 요소의 인덱스를 지정합니다.
인덱스란 리스트에서의 요소의 위치(번호)입니다. 리스트의 인덱스는 양수로 시작하면 항상 0부터 시작합니다.
인덱스를 음수로 지정하면 뒤에서부터 요소에 접근합니다.

형식

리스트[인덱스]

numbers = [ 91, 11, 3, 45, 56, 15 ]
리스트의 양수 인덱스와 음수 인덱스를 그림으로 표현하면 다음과 같은 모양입니다.

리스트는 [ ]로 요소에 접근한 뒤 값을 할당합니다.

형식

리스트[인덱스] = 값

numbers[0] = 91 처럼 [ ]에 인덱스를 지정한 뒤 값을 할당하면 됩니다.

1
2
3
4
5
6
7
8
9
numbers = [000000]    # 0이 6개 들어있는 리스트
print(numbers)
numbers[0= 91
numbers[1= 11
numbers[2= 3
numbers[3= 45
numbers[4= 56
numbers[5= 15
print(numbers)
 

 

실행결과

[0, 0, 0, 0, 0, 0]
[91, 11, 3, 45, 56, 15]
함수 설명 사용법
append() 리스트 제일 뒤에 항목을 추가합니다. 리스트이름.append(값)
insert() 지정된 위치에 값을 삽입합니다. 리스트이름.insert(위치, 값)
extend() 리스트 뒤에 리스트를 추가합니다.
리스트의 더하기 연산과 동일한 기능을 합니다.
리스트이름.extend(리스트)
remove() 리스트에서 지정한 값을 제거합니다.
지정한 값이 여러 개일 경우 첫 번째 값만 지웁니다.
리스트이름.remove(지울 값)
pop() 리스트 제일 뒤의 항목을 빼내고, 빼낸 항목을 삭제합니다. 리스트이름.pop()
index() 지정한 값을 찾아서 그 위치를 반환합니다. 리스트이름.index(찾을 값)
count() 리스트에서 찾을 값의 개수를 셉니다. 리스트이름.count(찾을 값)
reverse() 리스트 항목의 순서를 역순으로 만듭니다. 리스트이름.reverse()
sort() 리스트의 항목을 정렬합니다. 리스트이름.sort()
clear() 리스트의 모든 값을 삭제합니다. 리스트이름.clear()
del() 리스트에서 해당 위치의 항목을 삭제합니다. del(리스트이름[위치])
len() 리스트에 포함된 전체 항목의 개수를 셉니다. len(리스트이름)

파이썬에서 모든 것은 객체입니다. 객체 안에 있는 무엇인가를 사용할 때는 객체의 이름을 쓰고 점(.)을 붙인 후에 함수의 이름을 적습니다.

슬라이싱이란 인덱스로 범위를 지정하여 리스트의 일부만 가져오는 것입니다.
인덱스로 범위를 지정하여 리스트의 일부만 가져옵니다.

형식

리스트[시작인덱스:끝인덱스-1]

>>> letters['A', 'B', 'C', 'D', 'E', 'F', 'G']
>>> print(letters[0:3])
['A', 'B', 'C']

A[:4]와 같이 시작인덱스를 생략하면 리스트의 처음부터 끝인덱스-1 까지 가져오고,
A[4:]와 같이 끝인덱스를 생략하면 시작 인덱스부터 리스트의 마지막까지 가져옵니다.
A[:]와 같이 시작인덱스와 끝인덱스를 모두 생략하면 전체 리스트를 가져옵니다.

딕셔너리

딕셔너리도 리스트와 같이 값을 저장하는 것입니다.
하지만 딕셔너리는 중괄호({ })로 묶여 있으며 키(key)와 값(value)으로 이루어집니다.
영어사전에서 단어를 찾으면 단어의 설명이 나오듯이, 딕셔너리에 키를 제시하면 값을 반환합니다.

형식

딕셔너리 이름 = { 키1:값1, 키2:값2, 키3:값3, }

예를 들어 세동이 학생은 다음과 같은 정보가 있다고 합시다.

학번 21012345
이름 김세종
학과 컴퓨터공학과

다음과 같이 딕셔너리로 표현하면 하나의 변수인 student에 세동이의 모든 정보가 저장되어 있습니다.

student = { "학번":21012345, "이름":"김세종", "학과":"컴퓨터공학과" }

딕셔너리 사용하기

공백 딕셔너리를 만드는 방식은 다음과 같습니다.

형식

딕셔너리 이름 = { }

딕셔너리를 생성하면서 동시에 초기화하는 방법도 있습니다.

student = { "학번":21012345, "이름":"김세종", "학과":"컴퓨터공학과" }
>>> print(student)
{"학번": 21012345, "이름": "김세종", "학과": "컴퓨터공학과"}

딕셔너리에 쌍을 추가하는 방식은 다음과 같습니다.

형식

딕셔너리 이름[키] = 값

예로 앞에서 생성한 student에 연락처를 추가하려면 다음과 같은 코드를 사용합니다.

student["연락처"] = "010-0000-0000"
>>> print(student)
{"학번": 21012345, "이름": "김세종", "학과": "컴퓨터공학과", "연락처": "010-0000-0000"}

이미 있는 키를 사용하면 쌍이 새로 추가되는 것이 아니라 기존의 값이 변경됩니다.


예로 앞에서 생성한 student에 학과를 수정하려면 다음과 같은 코드를 사용합니다.

student["학과"] = "소프트웨어학과"
>>> print(student)
{"학번": 21012345, "이름": "김세종", "학과": "소프트웨어과", "연락처": "010-0000-0000"}

리스트는 인덱스를 가지고 항목을 찾을 수 있지만 딕셔너리에서는 키가 있어야 값을 찾을 수 있습니다.
키로 값에 접근하려면 다음과 같이 get() 함수를 이용하거나 '딕셔너리 이름[키]'를 사용합니다.

형식

딕셔너리 이름.get(키)

형식

딕셔너리 이름[키]

예로 앞에서 생성한 student로 키를 이용해서 값에 접근하는 예입니다.

>>> student.get("이름")
"김세종"
>>> student["이름"]
"김세종"

딕셔너리에서 사용되는 모든 키를 출력하려면 keys()를 사용합니다.

>>> student.keys()
dict_keys(["학번", "이름", "학과", "연락처"])

딕셔너리에서 사용되는 모든 값을 출력하려면 values()를 사용합니다.

>>> student.values()
dict_values([21012345, "김세종", "컴퓨터공학과", "010-0000-0000"])

딕셔너리의 모든 항목을 방문하면서 출력하려면 for 루프를 사용합니다.

>>> for k in student.keys():
        print(k, student[k])
학번 21012345
이름 김세종
학과 컴퓨터공학과
연락처 010-0000-0000

딕셔너리의 항목을 삭제하려면 del을 사용합니다.

>>> del student["연락처"]
>>> print(student)
{"학번": 21012345, "이름": "김세종", "학과": "컴퓨터공학과"}

딕셔너리의 모든 항목을 삭제하려면 clear()를 사용합니다.

>>> student.clear()
>>> print(student)
{}

리스트 vs. 배열

C나 자바와 같은 프로그래밍 언어에는 리스트가 없습니다.
대신 배열이라는 것이 리스트와 비슷한 개념으로 사용됩니다.

차이점이라면 리스트는 정수, 실수, 문자열 등 서로 다른 데이터 형식을 하나로 묶을 수 있지만, 배열은 같은 데이터 형식으로만 묶을 수 있습니다.

튜플

튜플은 리스트와 비슷하게 사용되지만, 리스트는 대괄호[ ]로 생성하고 튜플은 괄호( )로 생성합니다. 튜플의 요소에 접근할 때도 리스트와 동일하게 '튜플이름[인덱스]'를 사용합니다.

튜플은 값을 수정할 수 없고 읽기만 가능하므로, 읽기 전용의 자료를 저장할 때 사용합니다.