본문 바로가기
Python/Python Basic

6. Python - 변수 자료형 1, LIST(목록)

by Rosmary 2019. 7. 26.
728x90
반응형

1. LIST(목록) 자료형

 

 

List, 우리말로 "목록"이라고 불리는 Python의 자료형에 대해 이번 포스팅에서 언급하려한다. 이미 출력과 관련된 포스팅 예제에서 한 번 사용한 적이 있기 때문에, 이 자료형의 생김새를 보더라도 크게 이질감이 느껴지지는 않을 것이라 생각한다. List 변수는 아래와 같은 형태를 가진다.

 

==================

변수명 = [ 값1, 값2, 값3, ...] 

==================

 

지금까지,  여러 사람의 이름을 출력하기 위해서는 아래와 같은 방법들을 사용해왔다.

 

  먼저 왼쪽의 방법을 사용함에 따라 나타나는 문제점을 보자. 왼쪽은 이름을 입력받는 사람의 수에 따라 변수의 갯수가 정해진다. 이러면, 자주 사용하지도 않는 변수들이, 메모리 공간을 차지하게 된다. 메모리는 컴퓨터가 일련의 연산을 처리하는 작업 공간이라고 생각하면 되는데, 이 공간이 사용빈도가 낮은 변수들로만 가득 차게 된다면, 메모리 성능이 그만큼 낮아지게 된다.(지금이야, 별 것 아닌 프로그램을 돌리기 때문에 잘 느끼지 못하겠지만, 크기가 큰 프로그램을 구동할 때에는 문제가 될 수 있다. 이 부분에 대해서는 향후 기회가 되면 포스팅 하려한다)

 

그럼, 두 번째 방법처럼 변수 하나를 사용하면서, 중간 중간 변수값을 바꿔 선언하는 방법은 어떨까?? 뭐... 메모리를 아끼는 하나의 방법이 될 수 있긴 하지만, 개발자에게는 더할 나위없는 막노동이다.

 

이러한 종류의 귀찮음을 해결할 수 있는 방법이 바로 오늘 설명할 List 자료형이다. List는 하나의 변수 안에 여러 개의 값을 적용할 수 있기 때문에, 서로 관련이 있는 자료를 한 번에 관리하기가 편해진다. 다음은 네 사람의 이름을 하나의 변수 값에 선언하고 출력한 결과이다.

 

 

 

2.  리스트 내 원자값의 출력.

 

리스트로 선언된 변수명 name_list를 print()함수로 출력하면, 변수에 입력했던 네 사람의 이름이 한 번에 묶여서 나온다. 하지만, 우리가 원하는 결과는 각각의 이름이 따로 출력되는 것이다. 

 

각각의 이름은 List 변수 내의 원자값이라고 부른다(사실, 잘 사용하는 용어는 아닌 듯 하다). 현재 name_list는 4개의 원자값을 가지고 있으며, "Alex"는 name_list의 첫 번째 값, "Bretta"는 name_list의 두 번째 값, "Charley"와 "David"는 각각 세 번째, 네 번째 값이다. 만약 이 중 첫 번째 값인 "Alex"를 출력하고 싶다면 다음과 같이 입력하면 된다.

 

=============

print(name_list[0])  

=============

 

List의 각 값 출력 형태는 위와 같다. 우선 목록 변수명을 작성하고, 출력하고자 하는 값이 위치한 번째 수에서 1을 뺀 값을 중괄호 안에 넣어주면 된다. 조금 더 쉽게 예시를 들자면, "Alex"는 name_list 목록 내 첫 번째 값이므로, name_list[1-1], 즉 name_list[0]을 입력하면 된다는 것이다. 여기서 1을 빼는 이유는, 컴퓨터가 List나 이와 유사한 자료형을 인식할 때, 첫 번째 값을 0번째 자리라고 인식하기 때문이다.(C 언어의 배열, 그리고 앞으로 포스팅 할, Python의 튜플(tuple)이 그 예이다)

 

그럼, 해당 내용을 바탕으로 name_list의 항목을 출력해보자.

 

 

 

 

3. List 자료형의 값 변경.

 

만약, name_list의 4번째 값이 "David"가 아니라 "Drake"라는 이름이 들어가야한다고 가정해보자. 그럼, 저 하나의 값을 수정하기 위해, name_list 전체를 수정하는 것은 매우 귀찮은 일이 될 것이다. 다행히, 파이썬(뿐만 아니라 C언어의 배열도 유사한 기능을 가진다)에서는 List 전체를 수정하는 과정 없이, List의 내용을 변경할 수 있는 방법을 제공한다.

 

List 내의 각 값을 지칭하는 변수는 목록이름 뒤에 [n]을 붙여줌으로써 정의할 수 있다. 즉, 목록은 비슷한 유형의 변수를 모아놓은 것이며, 목록 내의 각 값은 "목록[n]"이라는 변수가 가지는 값이 된다. 따라서 수정은 아래와 같이 진행하면 된다. 

 

 

연습을 위해, Alex는 April로, Charley는 Cleon으로 바꿔보도록 하자.

 

*  목록의 번째 수를 나타내는 숫자를 index라고 한다. 즉, Alex는 name_list의 0번째 index를 가진다고도 정의할 수 있다. 지금부터 List의 n 값은 모두 index로 지칭한다.

 

 

 

4. List 값 제거 및 추가

 

List형은 이전에 보았던 print() 함수와 비슷하게, ".기능명"을 이용한 값의 추가/제거가 가능하다.(.format()을 떠올려보자)

 

=====================================

List 값의 추가: list명.append("추가할 값)

List 값의 제거: list명.remove("제거할 값")

=====================================

 

*  참고로, 점(.)뒤에 기능명() - .format() 이나 .remove() 등 -로 표시된 녀석들은 Method라고 부른다. 아직 클래스에 대해 배우지 않았으니, method에 대한 설명은 한참 뒤에나 포스팅하겠지만, 이 녀석들을 뭐라고 부르는지 용어정도는 알아두도록 하자. 앞으로도 이들은 메서드라고 칭할 것이다

 

 

append()와 remove() 메서드로 name_list 내의 값을 추가하고 변경할 수 있다는 것을 확인할 수 있다. 하지만, 우리가 값의 추가에 사용한 append() 메서드는 name_list의 가장 마지막에만 값의 추가가 가능하다. 그럼, 이들 값이 맨 앞 또는 원하는 위치에 들어오도록 할 수 있는 메서드가 존재하지는 않을까?

 

=============================================

List 내의 특정 위치에 값 추가:   list명.insert(index, "추가할 값")

=============================================

 

원하는 위치에 값을 삽입하기 위해서는 .insert()라는 메서드를 사용한다. 이 insert는 지금까지 봐 왔던 List 메서드들과 달리, 괄호 안에 숫자와 추가할 값 두 가지가 동시에 들어간다. 첫 번째에 사용되는 숫자는 List 내에 추가할 값의 위치를 지정해주는 Index 값이며, 두 번째는 해당 Index에 추가할 값을 명시하면 된다. 위의 예제에서 name_list.insert(2, "Cleon")이라는 코드를 분석해보면, 다음과 같은 의미가 된다.

 

"name_list 목록의 2번 Index에 Cleon이라는 값을 추가해 줘"

 

따라서 가장 앞에 값을 추가하고 싶다면, Index 값을 0으로 지정해주면 된다. 

 

 

5. 각 값이 위치한 Index 찾기

 

지금이야 List 내의 값의 수가 5개이기 때문에, 각 값이 갖는 Index 번호를 찾는 것이 어렵지 않다. 하지만, List에 포함된 값의 갯수가 100개 이상으로 많이 존재한다고 가정한다면, 이 값을 일일이 눈으로 찾기란 여간 까다로운 일이 아니다. List 자료형은 이러한 불편함마저도 메서드로 해결할 수 있다. name_list에서 "Cleon"의 Index 번호를 찾아보자. 

 

=====================================

List 내의 특정 값 Index 검색: List명.index("검색할 값")

=====================================

 

Cleon이라는 값은 name_list 목록에서 3번째에 위치하며, Index 값은 2를 갖는다. List 자료형에서 제공하는 index() 메서드는 이렇게, 목록 내의 값이 위치한 index 값을 돌려준다. 

 

 

 

 


List 자료형은 이 외에도 여러 메서드들을 지원한다만, 자주 쓰이는 것이 아니라 본 포스팅의 마지막에 간략하게 표로만 언급하고 넘어가려고 한다. 다음 포스팅에서는 List와 비슷한 듯 하면서도 다른 성질을 가지는 튜플(Tuple)에 대해 설명하려고 한다. 

 

LIst 자료형이 제공하는 메서드
.append("추가할 값") List의 가장 마지막 index에 새로운 값 추가
.remove("제거할 값") List에서 해당 값을 제거
.insert(Index, "추가할 값") List 내의 특정 Index에 값을 추가
.index("검색할 값") List 내에 존재하는 특정 값의 Index 위치 반환
.reverse() List 내 값들의 Index를 역순으로 재정렬
.count("검색할 값") LIst 내에 존재하는 "검색할 값"의 갯수 반환
.pop() List의 가장 마지막 index 값 반환 및 List 내에서 제거.
.sort() List 내 값들을 알파벳순 또는 오름차순으로 재정렬

 

 

FIN.

반응형

댓글