본문 바로가기
정리

파이썬의 자료구조(List, Tuple, Set, Dictionary)

by KwonSoonBin 2022. 4. 10.

파이썬의 자료구조

List

  • 순서가 있다.
  • 리스트는 [ ] 로 둘러쌓여있다.  list( ), 
  • 리스트는 그 값의 생성, 삭제, 수정이 가능

관련 함수

  • 리스트에 요소 추가(append)리스트 안에는 어떤 자료형도 추가할 수 있다.
  • 리스트 정렬(sort) sort 함수는 리스트의 요소를 순서대로 정렬해 준다.문자 역시 알파벳 순서로 정렬할 수 있다.
  • 리스트 뒤집기(reverse)reverse 함수 : 리스트를 역순으로 뒤집어 준다. 이때 리스트 요소들을 순서대로 정렬한 다음 다시 역순으로 정렬하는 것이 아니라 그저 현재의 리스트를 그대로 거꾸로 뒤집는다
  • 위치 반환(index) index(x) 함수는 리스트에 x 값이 있으면 x의 위치 값을 돌려준다.
  • 리스트에 요소 삽입(insert) insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다. 파이썬에서는 숫자를 0부터 센다
  • 리스트 요소 제거(remove) remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수
  • 리스트 요소 끄집어내기(pop) pop()은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제
  • 리스트에 포함된 요소 x의 개수 세기(count) count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 돌려주는 함수
  • 리스트 확장(extend) extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다.a.extend([4, 5])는 a += [4, 5]와 동일하다.

 

Tuple

  • 순서가 있으므로 인덱싱이 가능하다.
  • 튜플은 ( )으로 둘러싼다. 
  • 튜플은 그 값을 바꿀 수 없다(추가x 삭제x 수정x). 단 조회를 통해 새로운 변수를 만들어 추가삭제수정이 가능하다.
  •  리스트와 다른 점은 1개의 요소만을 가질 때는 요소 뒤에 콤마(,)를 반드시 붙여야 한다는 것과 >>> t2 = (1,)
  • t4 = 1, 2, 3 처럼 괄호( )를 생략해도 무방하다는 점이다.
  • 값 변경을 시도하면 에러가 발생한다.

 

Dictionary

  • 순서가 없다(Unordered). -> 인덱싱 불가
  • Key와 Value의 쌍 여러 개가 { }로 둘러싸여 있다. 각각의 요소는 Key : Value 형태로 이루어져 있고 쉼표(,)로 구분되어 있다.
  • ※ Key에는 변하지 않는 값을 사용하고,  Value에는 변하는 값과 변하지 않는 값 모두 사용할 수 있다.
ex) {Key1:Value1, Key2:Value2, Key3:Value3, ...}

dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

또한 Value에 리스트도 넣을 수 있다.
>>> a = { 'a': [1,2,3]}
딕셔너리 쌍 추가
>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a
{1: 'a', 2: 'b'}

딕셔너리 요소 삭제하기
>>> del a[1]
>>> a
{2: 'b', 'name': 'pey', 3: [1, 2, 3]}

관련 함수

Key 리스트 만들기(keys)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])


dict_keys 객체를 리스트로 변환하려면 다음과 같이 하면 된다.
>>> list(a.keys())
['name', 'phone', 'birth']


Value 리스트 만들기(values)
>>> a.values()
dict_values(['pey', '0119993323', '1118'])


Key, Value 쌍 얻기(items)
>>> a.items()
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])


Key: Value 쌍 모두 지우기(clear)
>>> a.clear()
>>> a
{}


해당 Key가 딕셔너리 안에 있는지 조사하기(in)
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False
원하는 value를 찾고 싶을 땐 그냥 key를 넣어 조회하면 되지만
만약 해당key가 없다면 파이썬은 에러를 띄운다. 즉 동작이 중단된다.

이때 사용가능한 함수가 get()함수이다.
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'0119993323'

겉으로 볼 때는 차이가 없지만 해당key가 없을 때 get함수는 None을 돌려준다는 차이가 있다.


딕셔너리 안에 찾으려는 Key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 
가져오게 하고 싶을 때에는 get(x, '디폴트 값')을 사용하면 편리하다.

>>> a.get('foo', 'bar')
'bar'

 

Set

집합(set)은 파이썬 2.3부터 지원하기 시작한 자료형으로, 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다.

  • 중복을 허용하지 않는다.
  • 순서가 없다(Unordered). -> 인덱싱 불가
  • 추가add , update  제거remove 가능
>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}

>>> s2 = set("Hello")
>>> s2
{'e', 'H', 'l', 'o'}
#순서가 없고, 중복을 허용하지 않는다.

만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 리스트나 튜플로 변환한후 해야 한다.

>>> s1 = set([1,2,3])
>>> l1 = list(s1)
>>> l1
[1, 2, 3]
>>> l1[0]
1
>>> t1 = tuple(s1)
>>> t1
(1, 2, 3)
>>> t1[0]
1

set자료형을 유용하게 사용하는 경우는 교집합, 합집합, 차집합을 구할 때이다.

>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])

1. 교집합
s1과 s2의 교집합을 구해 보자.
>>> s1 & s2
{4, 5, 6}

>>> s1.intersection(s2)
{4, 5, 6}



2. 합집합
>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}

>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}



3. 차집합
>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}

>>> s1.difference(s2)
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}

추가 및  제거

1개의 값만 추가(add)할 경우
>>> s1 = set([1, 2, 3])
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}


여러 개의 값을 한꺼번에 추가(update)할 때
>>> s1 = set([1, 2, 3])
>>> s1.update([4, 5, 6])
>>> s1
{1, 2, 3, 4, 5, 6}


특정 값을 제거하고 싶을 때
>>> s1 = set([1, 2, 3])
>>> s1.remove(2)
>>> s1
{1, 3}

 

출처: https://wikidocs.net/14

'정리' 카테고리의 다른 글

데이터엔지니어란?  (0) 2023.01.31
Git , Github 차이  (0) 2022.11.27

댓글