python

[8장] 리스트 - I

hoazzinews 2024. 11. 29. 16:36

프로그램에서는 데이터를 하나씩 관리하기도 하지만 여러 개의 데이터를 하나로 묶어서 관리하기도 합니다. 예를 들어 학급 학생의 이름을 관리한다고 할 때 학생은 한 명이 아니고 여러 명이기 때문에 모든 학생의 이름을 하나로 묶어서 관리해야 합니다.

여러 개의 데이트를 하나로 묶어서 관리하는 것을 프로그램에서는 컨테이너 자료형이라고 하는데요, 파이썬에서는 대표적으로 리스트(List), 튜플(Tuple), 딕셔너리(Dictionary)가 있습니다.

이번 장에서는 리스트에 대해서 살펴보고 계속해서  튜블과 딕셔너리를 살펴보겠습니다.

 

1. 리스트(List)란?

리스트는 일상에서 우리가 알고 있는 리스트와 동일한 개념입니다. 도서관 책 리스트, 학생 이름 리스트, MP3 플레이 리스트 등이 바로 리스트입니다. 다음은 학생 이름 리스트를 파이썬 언어로 나타낸 코드입니다.

['홍길동', '이병규', '이순철', '이승엽', '임찬규']

 

리스트는 데이터를 나열하고 앞과 뒤를 대괄호('[ ]') 로 묶으면 끝입니다. 그리고 리스트 자체도 데이터이기 때문에 변수에 할당해서 재사용 가능합니다. 다음은 리스트를 변수에 할당한 코드입니다.

studentNames = ['홍길동', '이병규', '이순철', '이승엽', '임찬규']

 

※ 참고. 변수와 마찬가지로 리스트도 선언과 초기화로 구분합니다. 리스트 자체는 리스트를 선언한 것이고 리스트를 변수에 할당 연산자('=')를 이용해서 할당하는 것을 변수 초기화라고 합니다. 하지만 일반적으로 선언과 초기화를 합쳐서 '리스트를 선언했다.'라고 합니다.

 

리스트를 변수에 할당했기 때문에 studentNames을 출력하면 다음과 같이 리스트의 데이터를 확인할 수 있습니다. 리스트의 데이터 하나하나를 아이템(item)이라고 합니다.

studentNames = ['홍길동', '이병규', '이순철', '이승엽', '임찬규']
print(studentNames)		# 리스트 아이템 확인

 

또한 type()을 이용해서 데이터 타입도 확인할 수 있습니다.

print(type(studentNames))

 

2. 데이터가 없는 리스트

리스트를 선언할 때 반듯이 데이터가 있어야 하는 것은 아닙니다. 다음은 리스트를 선언했지만 데이터가 하나도 없는 경우입니다.

mp3PlayList = []            # 데이터 없이 리스트 선언
print(mp3PlayList)          # 리스트 출력
print(type(mp3PlayList))    # 리스트 데이터 타입 출력

mp3PlayList는 리스트이기는 하지만 아이템이 하나도 없는 텅 비어 있는 리스트라고 할 수 있습니다.

 

3. 인덱스

여러 개의 데이터를 묶어서 리스트를 선언하면 각각의 데이터는 어떻게 사용할 수 있을까요? '인덱스'라는 것을 이용해서 각각의 데이터를 사용할 수 있습니다. 다음은 시험 성적을 묶어 놓은 scores 리스트입니다.

scores = [80, 95, 85, 100]      # 성적을 리스트로 선언했다.

이렇게 하면 컴퓨터에서는 자동으로 리스트의 첫 번째 아이템부터 데이터를 구분할 수 있는 '번호'를 부여합니다.

80: 	0번 부여
95: 	1번 부여
85: 	2번 부여
100: 	3번 부여

그리고 이런 번호를 '인덱스'라고 합니다. 인덱스0은 80 뜻하고, 인덱스1은 95, 인덱스2는 85, 인덱스3은 100을 뜻하게 됩니다.

 

인덱스가 리스트의 아이템을 구분할 수 있는 번호인데요, 인덱스를 이용해서 각각의 아이템을 확인할 수 있습니다.

scores = [80, 95, 85, 100]      # 성적을 리스트로 선언했다.
print(scores[0])                # 인덱스0에 해당하는 데이터 -> 80
print(scores[1])                # 인덱스1에 해당하는 데이터 -> 95
print(scores[2])                # 인덱스2에 해당하는 데이터 -> 85
print(scores[3])                # 인덱스3에 해당하는 데이터 -> 100

프로그램을 실행하면 인덱스를 이용해서 해당 아이템이 출력되는 것을 확인할 수 있습니다.

 

4. 리스트의 길이와 마지막 인덱스

인덱스는 개발자가 리스트를 선언하면 자동으로 만들어진다고 했는데요, 항상 0부터 시작하기 때문에 마지막 인덱스는 아이템 개수보다 항상 1이 작습니다. scores의 아이템개수는 총 4개이므로 마지막 인덱스는 3입니다.

 

리스트에 묶여 있는 아이템의 개수를 확인하기 위해서는 len() 함수를 사용합니다.

print(len(scores))              # scores 리스트의 아이템 개수 출력 -> 4

 

len()함수를 응용하면 리스트의 마지막 인덱스의 값을 확인할 수 있습니다. 다음은 리스트의 마지막에 해당하는 아이템을 len()함수를 응용해서 출력하는 코드입니다.

print(scores[len(scores) - 1])      # scores 리스트의 마지막 데이터 -> 100

 

위 코드는 len(score)를 통해서 리스트의 개수를 구한 후 1을 뺍니다. 그러면 마지막 아이템의 인덱스 3을 구할 수 있습니다. 이렇게 구한 마지막 인덱스를 이용해서(scores[3]) 리스트의 마지막 아이템을 확인할 수 있습니다.

 

※참고. len() 함수는 리스트의 길이를 확인할 때만 사용되는 것은 아니고, 문자열의 길이를 구할 때도 사용됩니다. 다음은 문자열의 길이를 구하고 터미널에 출력하는 코드입니다.

print(len('hello'))		        # 'hello' 문자열의 길이를 출력한다. - > 5
print(len(' h e l l o '))		# ' h e l l o ' 문자열의 길이를 출력한다. - > 11

 

다음은 len()을 이용해서 사용자가 입력한 문자메시지의 길이를 구하고, 길이에 따라 SMS와 MMS로 구분하는 코드입니다.

message = input('문자 메시지 입력: ')

if len(message) <= 100:             # 문자열의 길이가 100이하이면
    print('SMS 발송 합니다.')        # SMS 발송

else:                               # 문자열의 길이가 100보다 크다면
    print('MMS 발송 합니다.')        # MMS 발송

 

5. 반복문을 이용한 리스트 아이템 확인

아이템을 조회할 때 반복문(for, while)을 이용할 수 있습니다.

 

5-1. for문을 이용한 아이템 확인

for문의 iterable에 리스트를 넣어주면 전체 아이템을 확인 할 수 있습니다.

alphabet = ['A', 'B', 'C', 'D', 'E']

for c in alphabet:
    print(c)

 

5-2. while문을 이용한 아이템 확인

while문의 조건식에 리스트의 길이를 넣어주면 전체 아이템을 확인 할 수 있습니다.

alphabet = ['A', 'B', 'C', 'D', 'E']

i = 0
while i < len(alphabet):
    print(alphabet[i])
    i += 1

 

이번 시간에는 리스트 기본에 대해서 살펴봤습니다. 다음 시간에는 리스트와 관련된 함수들에 대해서 살펴보겠습니다.

 

이전 글: [7장] 반복문

다음 글: [9장] 리스트 - II