파이썬 리스트 (List)

파이썬 리스트 (List) – 파이썬 자료형 3편

리스트는 ‘파이썬 자료형 – 2편 문자열‘에서 설명했던 시퀀스 자료형의 하나로서, 어떠한 객체(문자열, 숫자 등등)의 순차적인 집합을 나타낼 때 사용합니다.

파이썬 리스트
이런 리스트 아닙니다… Photo : Stacy Spensley via Flickr

 

리스트 만들기

리스트는 아래와 같은 형태를 지니고 있습니다.

>>> L = ['a', 'b', 'c']

대 괄호([ ])로 둘러싸고 그 안에 콤마(,)로 리스트에 들어갈 아이템을 구분지으면 리스트가 만들어집니다. 리스트 내부의 아이템은 어떠한 객체든 상관없습니다. 또한 서로 다른 자료형을 하나의 리스트로 묶을 수 있습니다. 리스트를 만들 때 아무 아이템도 안넣어도 되죠.

>>> L = [1, 2, 3]
>>> L = ['apple', 3, 4+3j] # 서로 다른 자료형
>>> L = [] #빈 리스트입니다.
주의
리스트는 순서가 있습니다.

리스트는 어떠한 객체도 아이템으로 포함할 수 있기 때문에 중첩 리스트도 가능합니다.

>>> L = [[1, 2, 3], 4, 5]

첫 번째 아이템(리스트 [1, 2, 3]) 의 두 번째 아이템(2)에 접근하고 싶다면 아래와 같이 인덱싱을 두 번 하면 됩니다.

>>> L[0][1]
2

이론 상으로는 여러 번의 중첩 리스트가 가능하지만, 구현 및 유지보수에 많은 노력이 들어가기 때문에, 지양하는 것이 좋습니다.

리스트 시퀀스 연산

리스트 시퀀스 연산의 기본

리스트도 시퀀스 자료형이기 때문에, 이전 편에서 설명했던 시퀀스 연산을 그대로 사용할 수 있습니다. 자세한 시퀀스 연산은 이전 편에서 참고하시기 바랍니다.

>>> L = [1, 2, 3, 4, 5]
>>> L [0] # 0번째 아이템(첫 번째 아이템)을 선택합니다.
1
>>> L[2:] # 2번째 아이템(세 번째 아이템)부터 끝까지 선택합니다.
[3, 4, 5]
>>> L [-1] # 맨 마지막 아이템을 선택합니다.
5
>>> L[: -2] # 처음부터 끝에서 2번째 전까지 아이템을 선택합니다.
[1, 2, 3]
>>> L + [6, 7, 8] # 리스트 L 뒤에 또 다른 리스트를 붙입니다.
[1, 2, 3, 4, 5, 6, 7 ,8]

리스트 전용 연산

파이썬 리스트 추가 append()

append(obj)는 리스트 끝에 obj을 추가하고자 할 때 사용합니다.

>>> L = [1, 2, 3, 4, 5]
>>> L.append(6)
>>> L
[1, 2, 3, 4, 5, 6]

파이썬 리스트 정렬 sort()

리스트 내부의 아이템을 정렬하고자 할때 사용합니다. 숫자 뿐만 아니라 문자도 정렬합니다. 주의하셔야 할 점은 정렬된 리스트가 반환되는게 아니라, sort()를 실행하는 리스트가 바뀐다는 것을 명심하시기 바랍니다.

>>> L = [5, 3, 99, 17, 23]
>>> L.sort() # 리스트 L 의 값이 정렬되면서 L 내부의 값이 변경됩니다.
>>> L
[3, 5, 17, 23, 99]
>>> L = ['ccc', 'cat', 'asap', 'fed', 'bat']
>>> L.sort() #문자 a-z 순으로 정렬합니다.
>>> L
['asap', 'bat', 'cat', 'ccc', 'fed']

파이썬 리스트 역순 reverse()

파이썬 리스트는 순서가 있다고 했습니다. 이 순서를 정 반대로 뒤집는 함수가 reverse() 입니다.

>>> L = [1, 2, 3, 4, 5]
>>> L.reverse()
>>> L
[5, 4, 3, 2, 1]

파이썬 리스트 길이 구하기 len()

리스트에 몇 개의 아이템이 있는지 알아보려면 내장함수인 len()을 사용하면 됩니다.

>>> L = [111,222,333,444,555]
>>> len(L)
5

파이썬 리스트 삭제 pop(), del(), remove()

리스트에서 특정 아이템을 삭제하고 싶을 때가 있습니다. 3가지 방법이 있습니다.

첫 번째, 리스트 L에서 i 번째 아이템을 가져오고 해당 리스트에서 삭제하고 싶을 경우 L.pop(i)을 사용합니다. i 없이 사용하면 리스트 L의 맨 뒤의 아이템이 반환되고 리스트에서 삭제됩니다.

두 번째, 리스트 L에서 i 번째 아이템을 삭제만 하고 싶을 경우 내장함수 del L[i]을 사용합니다.

세 번째, 특정 순서 말고 특정 값 x를 삭제하고 싶다면 remove(x)를 사용합니다.

>>> L = ['Cupcake', 'Donut', 'Eclair', 'Froyo', 'Gingerbread']
>>> L.pop(3) # 4번째 아이템을 반환하고 리스트에서 해당 아이템을 삭제합니다.
'Froyo'
>>> L
['Cupcake', 'Donut', 'Eclair', 'Gingerbread']
>>> del L[0] #L.pop(0)와 같습니다.
>>> L
['Donut', 'Eclair', 'Gingerbread']
>>> L.pop() #인자를 적지 않아서 맨 뒤의 아이템을 반환하고 리스트에서 삭제합니다.
'Gingerbread'
>>> L
['Donut, 'Eclair']
>>> L.remove('Eclair') # 'Eclair' 값을 가진 아이템을 삭제합니다.
>>> L
['Donut']
>>> L.pop(10) # 현재 L은 1개의 아이템만 가지고 있으나 11번째 아이템을 삭제하려 합니다.
.... (생략) IndexError: pop index out of range
주의
리스트 범위를 초과하는 특정 순서의 아이템을 삭제하려하면 IndexError가 발생합니다. 예외처리 항목을 참조하세요.
주의
리스트에 없는 값을 지우면 ValueError가 발생합니다. 예외처리 항목을 참조하세요.

파이썬 리스트 인덱스 알아내기 index()

어떤 값 obj가 리스트의 몇 번째 위치에 있는지 확인하려면 index(obj) 를 사용합니다.

>>> L = [193, 82, 43, 884, 521]
>>> L.index(884)
3
주의
리스트에 없는 값을 index()를 통해 찾으려면 ValuError가 발생합니다. 예외처리 항목을 참조하세요.

파이썬 리스트 특정 위치에 삽입 insert()

리스트의 맨 뒤에 아이템을 삽입하려면 append(obj)를 사용하면 되지만, 어떤 경우에는 맨 앞, 혹은 특정 위치에 아이템을 삽입하고 싶을 때가 있습니다. 그 때는 insert(x, y) 를 사용합니다. x 번째 위치에 y 를 삽입하라는 뜻입니다.

>>> L = [1, 2, 3, 4, 5]
>>> L.insert(1, 10)
>>> L
[1, 10, 2, 3, 4, 5]

파이썬 리스트 확장 extend()

기존의 리스트에 리스트를 덧붙일때 사용합니다. extend(l) 를 사용하면 기존의 리스트 끝에 리스트 l 을 덧붙입니다. l은 반드시 리스트여야 합니다. 시퀀스 연산에서 리스트끼리의 + 연산과 같습니다.

>>> L = [1, 2, 3, 4]
>>> L.extend([5, 6])
>>> L
[1, 2, 3, 4, 5, 6]
>>> L = L + [7, 8] #extend() 와 같습니다. 혹은 L += [7, 8] 로 사용해도 됩니다.
>>> L
[1, 2, 3, 4, 5, 6, 7, 8] 

파이썬 리스트 비교

두 리스트가 같은지 비교하는 방법은 2가지가 있습니다.

첫 번째, 내장함수 cmp()를 사용하는 방법입니다. 리스트 k 과 l 를 비교하고자 한다면 cmp(k, l) 을 사용합니다.

두 번째, == 연산자를 사용합니다. 연산자에 대해서는 추후 설명하겠습니다.

>>> L = [1, 2, 3]
>>> K = [1, 2, 3]
>>> cmp(L, K)
0
>>> L == K
True
>>> K = [4, 5, 6]
>>> cmp(L, K) # K 의 리스트의 숫자가 더 큽니다. 그러면 -1 을 반환합니다.
-1
>>> cmp(K, L) # K 가 앞으로 갔습니다. K 가 여전히 더 크기 때문에 1을 반환합니다.
1

리스트에 특정 아이템이 몇 개나 들어있는지 세기 count()

리스트에서 어떤 특정 아이템 obj 가 몇 개 들어 있는지 그 갯수를 알고 싶다면, count(obj) 를 사용합니다.

>>> L = [1,5,6,2,34,2,1,5,5,4]
>>> L.count(5)
3

참고자료

  1. 파이썬 공식 문서

 

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *