본문 바로가기
언어/Python

[Python 기본 공부정리] 3-3. 자료형-리스트(list)

by 민-Zero 2019. 12. 1.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 

틀린 부분에 대한 지적은 감사합니다.

1. 리스트(list)

리스트는 여러 데이터를 하나로 모아 하나의 변수로 관리할 수 있도록 도와준다. 배열과 비슷하게 생각되지만 배열은 같은 데이터 타입끼리의 집합이지만 리스트에는 데이터 타입에 관계없이 모아서 관리할 수 있다.

문법)

리스트명 = [데이터 1, 데이터 2,....]

리스트의 요소로 다양한 값들이 가능하고 리스트 안에 리스트나 변수 등도 가능하다. 아무런 값도 없는 빈 리스트 또한 선언 가능하며 다른 방법으로는 변수명 = list()가 존재한다.

 

2. 리스트 인덱싱, 슬라이싱

리스트도 문자열처럼 인덱싱과 슬라이싱을 적용할 수 있다.

0번 인덱스가 첫 번째의 요소를 가리키며  인덱스 번호를 통한 연산 또한 가능하다. 음수로 인덱스 번호를 적용할 경우 문자열과 마찬가지로 뒤에서부터 출력된다.

 

리스트 안에 리스트가 들어 있는 경우도 마찬 가지이다. a [3]의 경우 [5,6,7] 이란 리스트를 저장하고 있고 그 리스트의 2번 인덱스에 7이란 값이 있으므로 a[3][2] => ([5, 6, 7])[2] => 7 이 된다. 3중 리스트 또한 같은 방식이다.

 

슬라이싱 또한 문자열과 같은 방식으로 적용된다. 다만 포함된 인덱스 번호 중에 리스트가 있을 수 있는 것뿐이다.

 

3. 리스트 연산

리스트는 + 와 *의 연산을 지원한다 이 연산은 각 요소를 더하거나 곱하는 것이 아니라 문자열처럼 리스트끼리 이어 붙이거나 반복하는데 사용된다.

a는 정수들을 가진 리스트 b는 char를 가진 리스트로 두 리스트를 더하면 각 요소들의 합이 아니라 리스트 자체가 이어 붙여지며 *를 할 경우 횟수만큼 반복되는 것을 볼 수 있다. *은 반복의 의미 이므로 리스트끼리의 *은 실행되지 않는다.

 

문자열의 길이를 구할 때 사용했던 len() 함수는 리스트, 튜플 등에서 모두 사용 가능하므로 잘 기억 하자.

 

4. 리스트 요소의 수정 및 삭제

지금까지 리스트가 상당 부분 문자열과 비슷한 기능을 지니고 있었다. 하지만 리스트는 문자열과 달리 내부 요소를 변경할 수 있다.

인덱싱을 통해 리스트 요소 하나하나의 값을 직접 변경할 수 있다.

만약 슬라이싱을 통해 연속적인 요소 값을 변경할 수 있다. 만약 이때 변경하는 값을 리스트로 넣을 경우 리스트 자체가 들어 가는 게 아니라 슬라이싱을 통한 위치에 리스트의 요소가 들어간다 주의하자. 

이 방법을 이용하면 리스트 요소의 삭제도 가능하다.

인덱싱을 통해 [] 빈 리스트로 바꿀 경우 리스트 자체가 들어가므로 요소의 삭제가 안되지만 슬라이싱을 통해 수정할 경우 리스트 자체가 아닌 리스트의 요소가 들어가므로 범위만큼 빈 리스트의 요소 즉 아무것도 없는 것이 들어가므로 요소가 삭제되는 효과를 가져온다.

 

아무것도 없는 빈 리스트를 통해 리스트의 요소를 삭제하는 효과를 볼 수도 있지만 del이란 함수를 통하면 인덱스를 통한 접근 슬라이싱을 통한 접근 모두를 이용하여 요소를 제거할 수 있다.

 

5. 리스트 관련 메소드

문자열과 마찬가지로 리스트 변수 이름 뒤에 '.'를 붙여서 여러 가지 리스트 관련 함수를 사용할 수 있다.

1) append()

리스트명. append(값)을 수행할 경우 해당 리스트의 맨 마지막에 사용자가 설정한 값을 추가하게 된다. 값에 리스트를 사용할 경우 리스트 자체가 마지막에 추가된다.

 

2) sort()

sort() 함수는 는 해당 리스트를 오름차순으로 정렬해준다. 내림차순으로 정렬은 sort() 함수는 매개변수로 bool 타입의 reverse라는 값을 받을 수 있는대 이 값이 True일 경우 오름차순이 아닌 내림차순으로 정렬해 준다.

 

3) reverse()

reverse() 함수는 리스트를 역순으로 돌리는 것이다 0,1,2,3번 인덱스가 있다면 0번은 3번과 1번은 2번과 바꾸어 역순으로 뒤집어 주는 역할이다. 내림차순이라고 착각하면 안 된다.

 

4) index()

index() 함수는 넘겨준 매개변수 값이 해당 리스트에 있다면 값이 위치한 인덱스 번호를 반환해 준다. 만약 값이 존재하지 않는다면 오류를 출력한다.

해당 리스트의 일부분을 넣어도 찾을 수 없다. 값 자체를 찾는 것이므로 넘겨준 값을 리스트의 부분이 아닌 하나의 리스트 값으로 인식하여 찾기 때문이다.

 

5) insert()

리스트명.insert(a, b)로 동작한다. 리스트의 a번째 위치에 b를 삽입하는 함수이다.

리스트의 요소를 수정하는 것이 아니라 해당 인덱스 번호에 값을 추가하는 것임을 유의하자.

 

6) remove(), pop()

리스트명.remove(x) 첫 번째로 나오는 x라는 값을 지우는 함수이다. remove함수 실행 시 아무런 값도 반환되지 않는다. 지우고자 하는 값이 존재하지 않을 경우 에러를 발생시킨다. x값이 여러 개 일 경우 x의 개수만큼 실행해야 모두 지울 수 있다. 

리스트명. pop(x)는 해당 리스트의 인덱스 번호 x에 해당하는 값이 지워지는대 .pop함수 실행 시 지우는 값을 반환해 주고 리스트에서 지워진다. 

즉 remove는 삭제이지만 pop은 리스트에서 값을 꺼내는 것으로 생각하면 된다.

pop에 아무런 인덱스 값도 주지 않을 경우 리스트의 맨 마지막 값을 꺼내 준다.

 

7) count()

 

리스트명.count(x) 함수는 매개변수로 넘겨준 x라는 값이 해당 리스트에 몇 번 등장하는지 세어주는 함수이다.

 

8) extend()

리스트명.extend(x)에서 x에는 리스트만 올 수 있으며 해당 리스트에 x 리스트를 더하게 된다.

즉, a.extend([4]) 는 a = a + [4] 또는 a+=[4] 와 같은 기능이고 b.extend(['d', 'e'])는 b = b + ['d', 'e'] 또는 

b+=['d', 'e'] 와 같은 기능이다.

댓글