ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자료구조] List, Set, Map 비교 (feat.파이썬)
    비전공자 공부일기/:: Computer Science 2021. 10. 18. 19:30

    자주 쓰이고 중요하다고 생각하는 자료구조의 개념.
    몇 번 공부하고 이해하고 해도 안 쓰다보면 금새 잊어버린다.
    현 직장은 자료구조 고민할 일이 별로 없다보니 금새 까먹고 있었다.

    이번에 알고리즘 공부하면서 안할 수가 없어서 다시 손에 잡음.
    고로 다시 내용정리, 오늘은 List, Set, Map을 정리해본다.

     

    세 자료구조의 차이점

      중복허용 순서보장
    List O O
    Set X X
    Map X
    (Value중복은 O)
    X

     

    자바에서는 이렇게 인터페이스 - 클래스 상속 구조로 구현되어있다.

     

     

    파이썬의 List 자료형

    객체를 일렬로 늘어놓은 구조로 되어있다. 객체를 인덱스로 관리하기 때문에 순서가 보장된다.
    List 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조한다.
    동일한 객체를 저장할 수도 있는데 이 때도 동일한 객체의 번지를 참조하게 된다. 또한, null도 저장이 가능하다.

    (자바의 경우) List는 인터페이스로 구현되어 LinkedList, ArrayList 등이 클래스로 상속받아 구현되어 있다.
    그런데 사실 나는 요즘 파이썬을 쓰고 있으므로 저쪽은 나중에 따로 정리하도록 하고 오늘은 파이썬 버전으로 알아보자.
    어떤 값들의 연속적인 내용을 담을 수 있으며, 길이가 가변적인 배열 이다

     

    리스트에서 데이터의 삽입과 삭제

    삽입
    lst.append(a) : 리스트의 마지막에 데이터 a 추가
    lst.insert(i, a) : 리스트의 i 인덱스에 데이터 a 추가

    삭제
    del lst[i] : 리스트의 i 인덱스에 있는 데이터 삭제
    lst.remove(a) : 리스트에 있는 'a 요소'를 찾아 삭제
    lst.pop(a) : 삭제라기보단, 요소 a를 반환과 동시에 리스트에서 삭제

    확장
    리스트 a, b가 각기 존재할 때
    a + b
    a.extend(b)
    ** a.append(b) 라고 하게 되면 b라는 리스트형 객체가 하나의 요소로 삽입되는 개념이라,
    [1, 2, 3, 4, 5] 가 아니라 [1, 2, 3, [4, 5]] 같이 삽입되는 방식이다. 삽입과 확장 개념구분 주의!

    정렬
    lst.sort()
    lst.reverse()

    요소 검색
    a in lst : true 또는 false 반환

     

    파이썬의 Set 자료형

    Set은 순서, 중복이 없다.
    따라서 만약에 s = set("Hello") 라는 집합을 만들었다고 했을 때,
    s를 출력해보면 l e o H 이런 식으로 나올 수도 있다. (중복 불가라 l 한 개는 사라짐)
    만약 인덱싱이 필요하다면 list 혹은 tuple로 형변환이 필요하다. (파이썬은 요 자료형 형변환이 겁나 쉽다;)

    그럼 이 Set는 언제 쓸까?
    종종 중복을 제거하는 필터역할로 Set을 쓰는 경우도 있다고 한다.
    그리고 가장 빛을 발하는 때는 집합의 연산! 합집합, 교집합, 차집합을 구할 때라고 한다. 오오

    생성
    s = set()  # 비어있는 set

    삽입
    s.add(a)
    s.update([a, b, c]) # 여러 개의 값 추가

    삭제
    s.remove(a)

    합집합
    s1 & s2
    s1.intersection(s2)

    차집합
    s1 | s2
    s1.union(s2)

    교집합
    s1 - s2
    s1.difference(s2)

     

     

    덧붙임.

    필요한 만큼만 찾아서 써본 파이썬,
    이번에 알고리즘 공부하면서 새롭게 공부하고 있는데
    제대로 공부하기 시작하니까 진짜 깡패언어(좋은쪽으로)인 걸 실감한다.
    이래서 파이썬 파이썬 하는구만 ㅋㅋㅋ 옴청나게 간편하다
    단, 자바로 시작하고 나서 파이썬 배우길 잘 했다. 반대였으면 오히려 더 고생했을듯..

    댓글

coding wanee