프로그래밍언어/python

[파이썬문법] 7. list

Albatross 2021. 12. 3. 16:10
반응형

1. list 

members = ['홍길동', '김대건', '정약용', '최양업'] 과 같이 list를 생성할 수 있다. 

혹은 members = list(iterable variable)을 통해 생성할 수 있다.

이 때 iterable variable이란, 문자열, list, tuple, dictionary, set 등의 원소를 갖는 반복가능객체를 뜻한다.

 

list는 같은 속성을 공유하는 변수를 그룹화하여 생성할 때 활용된다. 리스트 원소로 숫자, 문자열, 리스트 등 모든 자료형 값이 사용될 수 있으며, indexing과 slicing을 통해 원소에 접근하여 이를 수정할 수 있다. 

 

<그림1>

문자열을 list화하는 방법은 크게 두가지가 있다. (1) list함수, (2)split()함수 활용이 그것이다. 

이를 통해 문자열의 문자, 혹은 지정한 분리원칙에 따라 원소가 list 내에 저장된다.

 

2. list indexing

<그림2>

list indexing을 통해 개별 원소에 접근할 수 있다. 이 때 첫번째 원소는 listname[0]을 통해 참조 가능하다.

따라서 마지막 원소는 list 원소개수인 len(listname)-1이 그 index인것이다. 

 

<그림3>

만약 list의 원소가 list라면, 원소의 원소에 접근하기 위해 index를 두번 사용한다. 

예를 들어 Austria를 품고 있는 원소는 medals의 첫번째 원소이기에 [0]을 사용하고, Austria는 해당 원소의 첫 원소이기에 [0]을 추가적으로 사용한다. 그러면 medals[0][0]='Austria'로 출력된다. 

 

<그림4>

indexing을 통해 원소를 수정할 수 있다. 위와 같이 indexing을 통해 개별원소 값에 접근했다면 대입식을 사용하면된다. 

 

<그림5>

이 때 list를 가리키고 있던 변수 a가 있다고 가정하면, list원소 수정시 a의 값도 함께 변한다.

이는 우측 코드에서 y를 print할시 100이 출력되는 것과는 다른 결과인데, 아마 a가 C언어의 pointer와 같은 역할이라고 생각하면 이해하기 편할 듯 하다. 

 

3. list slicing

list slicing은 string slicing과 사실상 동일하다. 이 또한 참조를 통한 값 수정 혹은 새로운 list 형성이기에 원본은 훼손되지 않는다. 

 

<그림6>

L[b:e:s]의 형식을 통해 list slicing을 할 수 있다. 이 때 s는 정순과 역순을 결정짓는 역할을 한다. 

통상적으로 1개씩 증가하는 정순의 slicing이 활용되기 때문에 마지막 :s는 생략하는 경우가 잦다. 

또한 e는 해당 index number를 포함하여 slicing을 하는 것이 아니라 그 직전에서 멈추기 때문에 주의해야한다. 

 

4. functions for list manipulation

1) list copy

a = [0,1,2,3,4]
b = a[:]
b[2] = 5
print(b)
print(a)

위와 같이 a를 slicing하거나 list 자체를 할당하면 b는 a와 동일한 복사본이 생성되어 할당된다. 

이 때 b는 a가 가리키는 [0,1,2,3,4]와는 생김새는 같지만 정체성(id)는 전혀 다른 새로운 list를 가리키게 된다. 따라서 이 경우엔 b의 원소를 indexing을 통해 수정해도 a에는 반영되지 않는다.

 

2) list concatenation/repetition: +, *

<그림7>

3) membership operatior: in, not in 

ex) if item in list: item이라는 variable이 list 내에 원소로 존재하면 True, 없으면 False 반환 (not in은 반대)

 

4) list method

['__add__', '__class__', …… '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

list.method의 형태로 객체를 처리할 수 있도록 도와주는 함수

ex) list.append(x) : list 끝에 element x를 추가한다.

ex2) list.insert(i,x): index i의 원소로 element x를 추가한다. 

ex3) list.pop(i): list 내 i번째 element를 반환하고 제거한다. default값은 마지막 원소다. 

ex4) list.remove(x): list 내 element x를 제거한다. 만약 x가 2개 이상 존재할 시 맨 첫번째 x를 삭제한다. 

ex5) list.index(x): list 내 element x의 index값을 반환한다.

ex6) list.count(x): list 내 element x의 개수를 반환한다. 

ex7) list.clear(): list 내 모든 원소를 제거한다. 

<그림8>

ex8) list.copy(): list객체를 복사하여 새로운 리스트 객체를 생성한다. 이는 이전에 봤던 newlist = listname[:]와 같다.

새로 복사하여 생성한 list는 L과 생김새는 같지만 정체성(id)가 다르기 때문에 indexing을 통해 원소를 변경하여도 L에는 반영되지 않는다. 단, N=L이라고 명령문을 입력했다면 둘은 같았을 것이다. 

ex9) list.sort(): list를 오름차순으로 정렬해준다. 만약 괄호 내 reverse=True를 입력시 내림차순으로 정렬한다. 

ex10) del listname[i]: list 내 i번째 element를 제거한다. 이 때 대괄호 내에 slicing을 넣어 여러개를 제거할 수 있다. 

ex11) del listname: list 자체를 제거한다. 

반응형