Language/Python

[02-4] Python - 리스트 (Lists)

TechNote.kr 2016. 8. 9. 00:04
728x90

 Python의 리스트(List)는 값들을 순서있게 보관할 때 사용하는 자료구조이다. 



  1. 리스트 표현
  2. 리스트 접근
  3. 리스트 수정
  4. 리스트 합치기/반복하기
  5. 리스트 값 추가/삽입하기 - append(), insert()
  6. 리스트 값 삭제하기 - del, remove()
  7. 리스트 값 정렬하기 - sort()
  8. 리스트 값 순서 뒤집기 -reverse()
  9. 리스트 값 인덱스 확인 - index()
  10. 리스트 내 특정 값 갯수 세기 - count()

 




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일 경우 존재하지 않음을 판단할 수도 있다. 





728x90