1. 리스트

입력순서가 유지되는 자료형이다. 자바로 치면 ArrayList의 기능을 수행하는 것이다. 다른 언어에서 LinkedList, stack, Queue는 각각 다른 리스트인 반면 파이썬에서는 필요가 없을 정도로 상당히 강력하고 편리하다.

시간복잡도로는 O(1) 또는 O(n) 안에 수행된다. 예외가 있는건 정렬인데, 리스트를 정렬하기 위해서는 a.sort()의 경우 O(n log n) 이라는 시간이 걸린다.

자료형을 구분하지 않아 같은 리스트에 str, bool, int가 모두 들어갈 수 있다.

또한 리스트는 객체로 되어있는 자료형을 객체에 대한 포인터 목록을 관리하는 형태로 구현되어 있어, 연결 리스트처럼 구현이 가능하다. 이런 다양한 기능을 구현하기 위해서 속도는 버린 케이스다.

  • list = [] : 바꿀 수 있는 텅 빈 list
  • list = list() : 바꿀 수 있는 텅 빈 list
  • lists.append(N) : list에 맨 뒤에 ‘N’을 더함
  • lists.insert(N, M) : list의 N번째에 M을 더함
  • len(lists) : list의 길이
  • del lists[N] : list의 N번째 삭제
  • lists.remove(M) : list의 원소 중 M 삭제
  • list.sort() : list를 오름차순으로 정렬
  • a.sort(reverse=True) : list를 내림차순으로 정렬
  • a.reverse() : list를 뒤집음
  • b = list(map(int, b)) : b를 int list로 수정
  • a[B:C] : list a의 B번째부터 C번째까지
  • a[M:] : list a의 M번째부터
  • a[:N] : list a의 N번째까지
  • a[N:M:2] : list a의 N번째부터 M번째까지 홀수번째 인덱스만
  • except IndexError: : 인덱스가 범위를 넘어섰다면

2. 딕셔너리

키와 값 형태로 이루어진 딕셔너리다. 자바로 치면 Map의 역할을 하는 것이다. 다른 언어의 Hash와는 달리 입력순서를 유지한다. 그리고 가장 중요한 점은, 딕셔너리로 하는 연산은 모두 무려 O(1) 안에 수행이 가능하다.

  • list = {} : 바꿀 수 있는 텅 빈 dictionary
  • list = dict() : 바꿀 수 있는 텅 빈 dictionary
  • a = set() : set 또는 dictionary 형식으로 리스트 선언
  • a = {N, M, K} : set a에 N, M, K
  • a = {N:M, K:L} : dictionary a 에 N : M, K : L
  • collections.Counter(a) : list a의 아이템의 개수를 dict로 저장
  • a.most_common(2) : Counter dict에서 빈도 수가 가장 높은 2개의 요소