Python의 리스트(List)는 값들을 순서있게 보관할 때 사용하는 자료구조이다.
|
1. 리스트 표현
Python 의 리스트를 한마디로 정의하자면 다양한 자료구조들의 순서 있는 나열이라고 할 수 있다. 대괄호 "[", "]" 로 둘러 쌓여 있고, 콤마 "," 로 구분한다.
간단한 예를 들어보면 다음과 같다.
>>> list1 = [1,2,3,4] >>> list2 = ["1","2",3,4] >>> list3 = [1,"2",[3,"4"]]
위의 list1과 같이 같은 자료형의 값들을 순서있게 나열할 수도 있고, list2와 같이 서로 다른 자료형들을 나열할 수도 있다. 리스트 자체도 하나의 자료형이기 때문에 list3과 같이 리스트 내의 하나의 값으로 포함할 수 있다.
2. 리스트 접근
>>> a=["123", "234", 3, 4] >>> a[0] '123' >>> a[:3] ['123', '234', 3] >>> a[2:4] [3, 4]
여타 다른 자료형들과 마찬가지로 인덱스를 통해서 리스트내 개별 값들에 접근할 수 있다. 다른 자료구조들과 마찬가지로 인덱스는 0부터 시작하고 ":" 를 통해 일부분을 슬라이싱할 수도 있다.
3. 리스트 수정
>>> a=["123", "234", 3, 4] >>> a[2]=5 >>> a ['123', '234', 5, 4]
리스트와 같이 인덱스를 지원하는 튜플, 문자열과 다른 점이 있다고 한다면 위와 같이 수정이 가능하다는 점이다.
리스트 수정시 해당 리스트 자체의 id와 수정된 리스트내 값의 id는 다음과 같이 된다.
>>> a=["123", "234", 3, 4] >>> id(a) 140273302116544 >>> id(a[0]) 140273302258312 >>> id(a[1]) 140273302258472 >>> id(a[2]) 18026792 >>> id(a[3]) 18026768 >>> a[2]=5 >>> id(a) 140273302116544 >>> id(a[2]) 18026744 >>> id(a[3]) 18026768
위과 같이 리스트의 값이 수정이 되어도 리스트 자체를 가리키고 있는 a 의 id는 그대로 유지되고, 변경된 값의 id만 변경된다.
4. 리스트 합치기/반복하기
리스트 사용시 "+" 와 "*" 를 사용하면 결합(concatenate)과 반복(iterate) 기능을 사용할 수 있다.
>>> [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] >>> [1] * 5 [1, 1, 1, 1, 1]
>>> [1, 2, 3, 4, 5] - [1] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for -: 'list' and 'list' >>> [1, 2, 3, 4, 5] / [1] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for /: 'list' and 'list'
반면 "-"와 "/" 는 리스트해서 별다른 operation을 지원하지 않는다.
5. 리스트 값 추가/삽입하기
앞서 언급한 것과 같이 리스트는 수정 가능한 자료형이다. 따라서 리스트 곳곳에 새로운 값을 추가할 수 있다.
새로운 값을 추가하는 기능의 함수에는 append()와 insert()가 있다.
>>> list5 = ["a","b","c","d"] >>> list5.append("e") >>> list5 ['a', 'b', 'c', 'd', 'e']
append()의 경우는 새롭게 삽입할 인자만 넘겨주면 리스트 끝에 값을 새롭게 추가하고, insert()의 경우는 값을 새롭게 삽입할 위치, 삽입할 값을 인자로 넘겨주면 원하는 리스트 내 위치에 값을 추가해 줄 수 있다.
>>> list5 = ["a","b","c","d"] >>> list5.insert(2,"z") >>> list5 ['a', 'b', 'z', 'c', 'd']
6. 리스트 값 삭제하기
Python 리스트 자료형은 추가/삽입/수정 뿐만 아니라 삭제도 가능하다. 추가/삽입과 마찬가지로 두가지 방법으로 리스트 내 값을 삭제할 수 있다. 첫번째로 del()을 사용할 수 있는데, 삭제를 원하는 리스트 인덱스를 넘겨주면 해당 인덱스에 있는 값을 삭제한다.
>>> a=["123", "234", 3, 4] >>> del a[0] >>> a ['234', 3, 4]
>>> a=["1", 1, 2, "2", 1, "1"] >>> a.remove("1") >>> a [1, 2, '2', 1, '1']
다음으로는 remove()를 이용할 수 있는데, 삭제 원하는 값을 인자로 넣어주면 동일한 값은 리스트 내에서 모두 삭제한다.
7. 리스트 값 정렬하기
[-2.1, 1, 6, 11, 193] >>> list7 = [11, 6, 193, 1, -2.1, -1, -3] >>> list7.sort() >>> list7 [-3, -2.1, -1, 1, 6, 11, 193]
정렬되지 않은 리스트 값은 sort()를 통해 정렬을 할 수 있다. int 나 float 등과 같이 숫자 자료형일 경우 위와 같이 정렬 가능하다.
>>> list7 = ["acc","abc","a","b"] >>> list7.sort() >>> list7 ['a', 'abc', 'acc', 'b']
문자열의 경우 제일 앞자리 부터 한자리씩 비교하여 그 정렬되는 순서를 정한다. sort()를 호출하면 별도의 return 값으로 정렬된 리스트를 반환하는 것이 아니라 주어진 리스트 내에서 정렬을 수행한다.
>>> list7 = ["acc","abc","a","b"] >>> ret = list7.sort() >>> print ret None
별도의 return 값을 확인해 보면 None이 출력되는 것을 확인할 수 있다. 기본적으로 sort()는 오름차순 정렬을 제공한다. 내림차순 정렬이 필요할 경우 sort()와 함께 다음에 설명할 reverse()를 사용하면 된다.
>>> list7 = ["acc","abc","a","b"] >>> list7.sort() >>> list7.reverse() >>> list7 ['b', 'acc', 'abc', 'a']
8. 리스트 값 순서 뒤집기
>>> list8 = [1,6,9,3,6] >>> list8.reverse() >>> list8 [6, 3, 9, 6, 1]
주어진 리스트 값들의 순서는 reverse()로 뒤집을 수 있다. 즉, reverse()를 사용하면 위와 같이 역순으로 리스트가 변경되는 것을 볼 수 있다. sort() 마찬가지로 별도의 반환 값은 존재하지 않는다.
9. 리스트 값 인덱스 확인
>>> list9 = ["a",1,"1","b",2,1] >>> list9.index("b") 3 >>> list9.index(1) 1
리스트 내 특정 값의 인덱스를 확인하기 위해서는 index()를 사용한다. 가장 첫번째 값은 인덱스 0부터 시작하고, 만약 동일 값이 2개 이상일 경우, 첫번째 값의 인덱스를 반환한다.
>>> list9 = ["a",1,"1","b",2,1] >>> list9.index(0) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 0 is not in list
인덱스를 확인하고자 하는 값이 존재하지 않을 경우 위와 같이 "찾고자 하는 값" is not in list 라는 ValueError 가 발생한다.
10. 리스트 내 특정 값 갯수 세기
>>> list10 = [1,2,3,4,5,2,4,6,8,0] >>> list10.count(1) 1 >>> list10.count(2) 2 >>> list10.count(9) 0
count()를 사용하면 리스트 내 값이 존재하는지, 존재한다면 몇 개 있는지 확인할 수 있다. 반환 값이 0일 경우 존재하지 않음을 판단할 수도 있다.
'Language > Python' 카테고리의 다른 글
[02-6] Python - 딕셔너리 (Dictionary) (0) | 2016.12.31 |
---|---|
[04-2] Python - 논리연산자/비트연산자 (boolean/bitwise operation) (0) | 2016.12.30 |
[04-1] Python - range 와 xrange 의 비교 및 차이점 확인 (0) | 2016.08.11 |
[03-2] Python - for (반복문, Loops) (0) | 2016.08.11 |
[02-1] Python - 변수 할당의 개념 (0) | 2016.08.08 |
[02-3] Python - 문자열 (Strings) (0) | 2016.08.08 |
[02-2] Python - 숫자 (Numbers) (0) | 2016.08.07 |
[02-5] Python - 튜플 (tuple) (0) | 2016.08.07 |