파이썬 프로그래밍 시작 (8) 자료구조(Data Structure) : 리스트

파이썬 프로그래밍 시작 (8) 자료구조(Data Structure) : 리스트

많은 컴퓨터 프로그램은 알고리즘과 자료구조로 구성됩니다. 자료구조에 대해 알면 어린이 파이썬 프로그래머, 초보 프로그래머도 유용할게 쓸 수 있는 파이썬 코드를 짤 수 있습니다. 리스트, 튜플, 딕셔너리라는 자료구조 중 첫 번째로 리스트부터 시작합니다. 8번째로 파이썬 프로그래밍에 대해 배우는 이번 포스팅에서는 리스트를 만드는 방법부터, 리스트용 전용 함수까지 배워보겠습니다.



글의 순서

파이썬 프로그래밍 시작하기 : replit 로그인
코딩용어 알고리즘과 자료구조
파이썬 자료구조 ; 리스트(list)
리스트에서 사용빈도가 높은 대표 함수 5개


파이썬 프로그래밍 시작하기 : replit 로그인

리플(http://repl.it)에 로그인합니다.
로그인하고 난 후 보이는 화면의 중앙 상단에 ‘+new repl’ 버튼이 있습니다. 이 버튼을 클릭하면, ‘New repl’ 창이 뜨는데 여기서 프로그래밍 언어로 파이썬(Python)을 선택합니다. 파이썬 선택 후 ‘Creat Repl’ 을 클릭합니다.

이 과정을 거치면 지난 포스팅에서 보셨던 코딩 환경이 나타나는데, 역시나 3개의 창이 보입니다. 창의 배치는 달라질 수 있습니다만, 그 3개의 창은 각각 코드를 담고 있는 파일이름이 있는 창, 코드를 편집할 수 있는 창, 코드 실행결과를 확인할 수 있는 창(=터미널)으로 구성되어 있습니다.



코딩용어 : 알고리즘과 자료구조

자료구조(data structure)는 컴퓨터에서 자료를 어떻게 구성하는지, 어떤 방식으로 관리하는지에 대한 것입니다. 대부분의 컴퓨터 프로그램은 알고리즘과 자료구조가 합쳐진 형태입니다. 여기서, 알고리즘은 목적을 달성하기 위한 절차라고 할 수 있으며, 자료구조는 알고리즘을 구현하는데 필요한 데이터의 집합입니다.


파이썬 자료구조 : 리스트(list)

리스트는 자리번호에 따라 값을 저장하는 자료 구조이며, 우리나라 말로는 목록이라고 합니다. 여기서는 리스트라고 쓰겠습니다. 리스트를 구성하는 요소를 원소(element) 라고 합니다. 다시 말해 리스트는 원소 여러 개를 묶어 놓은 것입니다. 지금부터는 목록을 리스트라고 했듯 원소를 엘리먼트라고 하겠습니다.

리스트를 만드는 법은 아래와 같습니다. 리스트를 만드는 함수는 list()이거나 []입니다. 리스트가 어떤 모습일지를 확인하는 데는 역시나 print라는 명령어가 제일 좋은 방법입니다. 리스트01 코드의 출력결과는 x, y 모두 []입니다.

실습코드 : 리스트01

x = list()
y = []

print(x)
print(y)

리스트의 원소는 숫자가 될 수도, 문자가 될 수도 있습니다. 숫자와 문자를 혼합할 수도 있습니다.

실습코드 : 리스트02

x = [1,2,3,4]
y = ["hello", "world"]
z = ["hello", 1,2,3]

print(x)
print(y)
print(z)

여러 리스트의 엘리먼트를 합칠 수도 있으며, 리스트 안에 있는 엘리먼트를 바꿔치기 할 수도 있습니다. 여기서 다시 기억해야 할 것이 있는데, 리스트 내에 첫 번째로 오는 엘리먼트의 자리번호는 0이라는 것입니다. 0부터 시작한다는 것에 익숙해지셔야 합니다.

리스트04 코드를 실행시키면 1과 4가 출력됩니다. x라는 리스트의 자리번호 0번은 첫 번째 엘리먼트를, 자리번호 3번은 네 번째 엘리먼트를 각각 의미합니다. 이와 같이 리스트는 자리번호라는 인덱스를 기반으로 값을 저장하는 자료구조입니다.

실습코드 : 리스트03

x = [1,2,3,4]
y = ["hello", "world"]

print(x + y)

실습코드 : 리스트04

x = [1,2,3,4]

print(x[0])
print(x[3])

리스트05 코드는 엘리먼트 바꿔치기하는 모습입니다. x라는 리스트의 네 번째 엘리먼트(x[3])를 10으로 바꾸는 코드입니다.

실습코드 : 리스트05

x = [1,2,3,4]
x[3] = 10

print(x)

리스트05 코드에서 x는 4개의 엘리먼트를 가지고 있습니다. 4개 밖에 없는데 5번째 자리를 쓰라는 명령을 한다면 어떻게 될까요? 오류(error)가 발생합니다. 여기서 오류도 에러(error)라고 부르겠습니다. 엘리먼트 개수를 초과해서 요구하면 리스트의 크기보다 더 큰 자리에 접근(access) 하려고 하며, 거기는 아무런 엘리먼트가 없으니 에러가 나는 것입니다.


리스트에서 사용빈도가 높은 대표 함수 5개

리스트를 다룰 때 쓰는 대표적인 리스트용 함수를 살펴보겠습니다. 우리가 자라면서 언어를 익힌 것은 우리도 모르는 사이에 외워진 것입니다. 여러 번 반복해서 보고, 코딩해가면서 대뵤적인 리스트용 함수가 자연스럽게 외워지길 바랍니다.

리스트 함수 함수의 의미
len 리스트의 크기
sorted 순서대로 정렬
sum 리스트 내에 있는 엘리먼트가 모두 숫자일 경우, 엘리먼트를 모두 더한 결과
index 엘리먼트의 위치
in in y 라고 하면, y라는 리스트 안에 어떤 엘리먼트가 있는지를 묻는 것
리스트 함수

(1) len

리스트의 크기를 알려주는 함수 len을 사용하면서, 변수의 의미까지 다시 살펴보겠습니다. 리스트06 코드를 실행시키면 4가 나오는데, len 이라는 함수는 x라는 리스트의 크기를 알려줍니다. 리스트의 크기는 리스트 안에 있는 엘리먼트의 개수를 의미합니다. 리스트06 코드에서 num_elments 라는 변수를 하나 만들고, 이 변수에 리스트 x의 크기를 담아둡니다. x라는 리스트에 4개의 엘리먼트가 있으므로 len(x)는 4가 됩니다. 이 4를 num_elements라는 변수에 담아 뒀다가 출력하니까 4가 나오는 것입니다.

실습코드 : 리스트06

x = [1,2,3,4]

num_elements = len(x)
print(num_elements)

(2) sorted

리스트 안에 있는 엘리먼트를 순서대로 정렬할 때 sorted 라는 함수를 합니다. 리스트07 코드를 실행하면 [1,2,3,4] 가 나오는데, 리스트 x를 정렬한 후 변수 y에 담았기 때문입니다.

실습코드 : 리스트07

x = [2,3,1,4]
y = sorted(x)

print(y)

(3) sum

만약, 리스트의 엘리먼트가 숫자로만 이뤄져 있다면, 모든 원소를 sum이라는 함수를 이용하여 합칠 수도 있습니다. 실습코드 08을 실행시키면 y라는 변수에 sum(x)라는 값을 담아두었다가 출력하게 되므로 10이 출력됩니다.

실습코드 : 리스트08

x = [2,3,1,4]
y = sum(x)

print(y)

(4) in

리스트와 반복문을 함께 사용하면 좀 더 많은 일을 할 수 있습니다. 리스트09 코드는 리스트 내의 엘리먼트를 하나씩 쓰는 코드입니다. 코드를 실행시키면 변수 i라는 그릇에 엘리먼트 3, 2, 4, 1이 하나씩 차례대로 들어갑니다. 리스트의 크기만큼 반복됩니다.

실습코드 : 리스트09

x = [3,2,4,1]

for i in x:
  print(i)

리스트10 코드에서 사용된 리스트 y의 엘리먼트는 문자열입니다. 숫자보다 더 직관적입니다.

실습코드 : 리스트10

y=["hello","world"]

for s in y:
  print(s)

(5) index

리스트는 자리번호라는 인덱스를 기반으로 값을 저장하는 자료구조입니다. 리스트 내에 있는 엘리먼트의 위치를 찾는 함수가 index입니다. 리스트11 코드에서 x.index[3]은 3이라는 엘리먼트의 위치가 어디인지를 묻는 것입니다. 리스트 x에서 엘리먼트 3은 첫 번째에 위치하므로 0이 출력됩니다. 또한 두 번째 출력문에서는 리스트 y에서 world의 위치는 두 번째이니까 1이 출력됩니다. 만약 각 리스트에 없는 엘리먼트의 위치를 물으면 에러를 띄웁니다.

실습코드 : 리스트11

x = [3,2,4,1]
y=["hello","world"]

print(x.index(3))
print(y.index("world"))

(6) in

리스트12 코드는 리스트 내에 원소가 있는지 없는지만 확인할 수 있는 in 함수에 대한 것입니다. 만약 있으면 True, 없으면 False를 출력합니다. 있는지 없는지만 확인하는 함수이므로, 불리언(boolean) 값이 출력되는 것입니다. 리스트12를 실행시키면 순서대로 False, True 가 출력됩니다. 첫 번째 print는 x라는 리스트 안에 ‘hello’가 있는지를 확인해봤고, ‘hello’가 없었기 때문에 False를 출력한 것입니다.

실습코드 : 리스트12

x = [3,2,4,1]
y=["hello","world"]

print("hello" in x)
print("hello" in y)

마지막으로 True, False가 나온 김에 조건문과 함께 써보겠습니다. 리스트13 코드는 ‘hello가 있어요’를 출력하지만, 리스트14 코드는 아무것도 출력하지 않습니다. 리스트 x에는 “hello”가 없어, “hello” in x 라는 조건을 만족하지 못하기 때문입니다.

실습코드 : 리스트13

x = [3,2,4,1]
y=["hello","world"]

if "hello" in y:
  print("hello가 있어요.")

실습코드 : 리스트14

x = [3,2,4,1]
y=["hello","world"]

if "hello" in x:
  print("hello가 있어요.")


마치며 …

이번 포스팅에서는 파이썬 프로그래밍을 한 차원 높일 수 있는 자료구조 중 리스트를 만드는 방법부터, 리스트용 전용 함수까지 배워보았습니다. len, sorted, sum, index, in과 같은 사용빈도가 높은 리스트용 함수를 기억해 주시기 바랍니다.

많은 컴퓨터 프로그램은 알고리즘과 자료구조로 구성되므로, 자료구조에 대해 알면 실제로 유용하게 쓸 수 있는 파이썬 프로그래밍을 할 수 있습니다. 리스트, 튜플, 딕셔너리라는 자료구조 중 리스트를 배워보았고, 다음은 튜플 차례입니다.

 

 

함께 참고하면 더 좋은 글 :
1. 파이썬 프로그래밍 시작하기 (1) 온라인 프로그래밍 환경 replit
2. 파이썬 프로그래밍 시작 (2) 변수, 타입, 문자열 실습
3. 파이썬 프로그래밍 시작 (3) 파이썬 함수 실습
4. 파이썬 프로그래밍 시작 (4) 조건문
5. 파이썬 프로그래밍 시작 (5) 연습문제 : 함수 만들기
6. 파이썬 프로그래밍 시작 (6) 반복문
7. 파이썬 프로그래밍 시작 (7) 반복문과 무한루프


참고자료

테크보이 워니(2020), 코딩 1시간만에 배우기 – 파이썬 (ft. 실리콘밸리 엔지니어)

 

Leave a Comment