List 와 set의 차이

문해피와 제육볶음·2023년 8월 26일
0

CS

목록 보기
2/5

최근 기술면접을 준비하면서 궁금한것이 생겼었습니다.
그것은 데이터들을 하나로 모으는 컬렉션 자료형이지만 List와 set의 차이점이었습니다.

🤔 차이점

둘의 차이점은 크게 3가지가 있습니다.

  • 순서
  • 중복
  • 연산

이러한 차이점을 상세하게 알아보겠습니다.

순서

파이썬에서 코딩 테스트나 코드를 작성하였을때 모두들 경험을 해보셨을것입니다.

  • list 순서 ⭕️
  • set 순서 ❌

list와 set에 같은 데이터를 넣었을때 출력을 해보면
list는 순서가 보장이되고, set은 순서의 보장이 되지 않는점이 있었습니다.

그렇다면 set은 왜 순서가 보장이 안되는 것일까요?
그것은 set이 해시 테이블을 기반으로 구현이 되었기 때문입니다.

해시 테이블 : 키와 값이 쌍으로 저장하는 자료구조로, 키에 대한 값을
빠르게 찾을 수 있는 장점이 있습니다.

💡 추후에 해시 테이블에 관한 게시물을 작성하겠습니다.

중복

  • list 중복 ⭕️
  • set 중복 ❌

중복이 안되는 것또한 경험을 통해서 해보셨을것입니다.
이것또한 set은 해시테이블의 속성때문에 중복을 허용하지않기 때문입니다.

연산

연산에서도 list와 set이 차이를 보입니다.

  • list : 덧셈, 뺄셈, 곱셈, 나눗셈, 인덱싱, 슬라이싱, 연결, 정렬, 검색, 삽입, 삭제등의 연산
  • set : 덧셈, 뺄셈, 곱셈, 나눗셈, 인덱싱, 슬라이싱, 연결, 검색, 삽입, 삭제등의 연산

이것또한 set은 해시테이블을 기반으로 만들어 졌기 때문에 list는 set보다 다양한 연산을 지원합니다.

🤔Set이 구현되는 순서

위의 차이를 설명하면서 해시테이블때문에 그렇다고 많이 말씀드렸는데 set은 어떻게 구현이 되는것일까요?

  1. set에 "문어"라는 값이 들어갑니다.
  2. 해시 함수에 "문어"라는 값의 해시값을 계산합니다.
    def hash(value):
       result = 0
       for char in value:
           result += ord(char)
       return result % 100
    이것은 제가 임의로 만든 해시함수로 "문어"라는 요소가 들어가게 되면 연산을 통해서 6567이라는 해시 값이 나옵니다.
  3. 해시 테이블에 맞춰 해시값에 해당하는 인덱스에 저장합니다.
    위에서 나온 6567을 받아 해시테이블의 크기가 만약 100이라면 65에 해당하는 인덱스에 문어가 저장이되게 됩니다.
{
    65: 문어,
}

🤔 언제 뭘 어떻게 써야할까

set

  • 중복의 요소를 제거하거나, 고유한 요소만을 저장해야하는 상황
  • 집합과 같은 구조를 구현해야하는 상황
  • 수학적 연산을 해야하는 상황

list

  • 인덱싱, 슬라이싱, 연결, 등의 연산을 수행해야 하는 상황
  • 요소의 순서를 유지해야하는 상황

0개의 댓글