본문 바로가기
통계와 빅데이터

파이썬 자료 구조 : 리스트, 튜플, 집합, 딕셔너리

by MumMummi 2024. 9. 8.

 

리스트

  • 리스트는 여러 개의 원소를 저장하는 자료형으로 container라고 부르며, 저장된 값을 변경할 수 있는 (mutable) 특징을 가지고 있다. 리스트에 저장된 값들에는 순서가 존재하며 (sequential), 리스트는 대괄호를 이용해서 생성하고, 쉼표를 이용해서 구분한다. 
my_list = [1, 2, 3, 4, 5]
  • 리스트는 다른 프로그래밍 언어와 차이가 있는데, 보통 리스트와 유사한 "배열"이라는 구조는 같은 데이터 형식의 값만 저장할 수 있다는 제한이 있지만, 리스트는 다른 데이터 형의 값도 함께 저장할 수 있다. (즉, 문자형/논리형/숫자형 혼합하여 리스트 구성 가능) 
  • 리스트의 하나하나의 원소에 접근하기 위해서는 인덱스를 활용하는데, 0부터 n-1까지의 인덱스를 사용할 수 있다. 
my_mixed_list = [1, "Hello", True, 3.14]
print(my_mixed_list[0]) 
print(my_mixed_list[3])
  • 또한 파이썬은 음수 인덱스를 사용할 수 있다는 특이성이 있는데, 리스트 원소의 개수를 모르는 경우 마지막 원소를 찾아갈 때, n-1 대신 -1을 쓰면 마지막 원소를 찾을 수 있다. 또한 -2라고 쓰면 마지막에서 두번째 원소를 찾을 수 있다. 
my_mixed_list = [1, "Hello", True, 3.14]
print(my_mixed_list[-1]) 
print(my_mixed_list[-4])
  • 파이썬에서 제공하는 리스트 관련 주요 함수는 append, extend, insert, remove, pop, clear, index, count, sort , reverse, copy, len, min, max, sum 등이 있다. 
my_list = [1, 2, 3, 4, 5] 
my_list.append(6) 
print(my_list)
my_list = [1, 2, 3, 4, 5]
ur_list = [6, 7, 8, 9]
my_list.extend(ur_list)
print(my_list)
my_list = [1, 2, 3, 4, 5]
my_list.insert(3,10)
print(my_list)
mylist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
slice2 = mylist[:5]
print(slice2)

 

 

튜플

  • 튜플은 여러 개의 원소를 저장하는 자료형(container)이며, 저장 값을 변경할 수 없고(immutable), 저장된 값들에 순서가 존재(sequential)한다. 
  • 파이썬에서 튜플은 소괄호()를 이용해서 생성하고, 쉼표로 값을 구분하며, 다양한 유형의 데이터형을 함께 담을 수 있다.
  • 즉 튜플과 리스트의 차이는 저장된 값을 변경할 수 있느냐 없느냐로 나눌 수 있으며, 이에 따라 리스트에서 사용할 수 있는 대부분의 함수들을 사용할 수 없고, count와 index, packing, unpacking정도의 주요 함수만 사용이 가능하다. 
my_tuple = (1, 1, 2, 3, 4, 5) 
print(my_tuple)
print(my_tuple.index(1))
print(my_tuple.count(1))
print(my_tuple.index(7))
  • 만약 튜플에서 값을 바꾸고 싶은 경우, 튜플을 리스트로 바꾸고 값을 바꾸는 방법을 적용할 수 있다. 

 

집합

  • 집합은 여러 개의 원소를 저장하는 자료형(container)이고, 저장된 값을 변경할 수 있으며(mutable), 저장된 값들의 순서가 존재하지 않는다.(non-sequential) 
  • 파이썬에서 집합은 중괄호{}를 활용하여 생성되며 쉼표를 이용해서 구분하고, 다양한 유형의 데이터를 함께 담을 수 있다. 
  • 집합은 모든 원소가 고유하여, 중복이 되는 원소는 모두 동일한 원소로 간주하며, 원소는 순서와 상관이 없다. 이에 아래 집합들은 모두 동일한 집합으로 간주된다. 
  • myset1 = {1, 2, 3, 4, 5}
    myset2 = {1, 1, 2, 3, 3, 3, 4, 5}
    myset3 = {5, 4, 3, 2, 1}
    myset4 = {5, 4, 3, 2, 1, 2, 3, 4, 5}
  • 이러한 특성 대문에 파이썬의 집합에서는 각각의 원소에 접근하는 것이 허용되지 않고, index를 사용할 수 없다. 다만 in을 이용한 접근이 가능이 가능하다. 
my_set = {1, 2, 3, 4, 5}
if 3 in my_set : 
    print("3은 집합에 속합니다.")
else :
    print("3은 집합에 속하지 않습니다.")
  • 집합은 리스트나 튜플과 달리 수학적 연산을 지원하며, 합집합 (ㅣ), 교집합 (&),  차집합(-), 대칭차집합 (^) 등을 출력할 수 있다. 여기서 대칭차집합이란 합집합에서 교집합을 제외한 것이다. (수학적 연산을 하려면 리스트, 튜플을 set 함수를 사용하여 집합으로 변환) 
  • 이외에도 파이썬에서 제공하는 집합 함수들은 add, update, remove, discard, pop, clear, copy, len, union, intersection, difference, issubset, issuperset, isdisjoint 등이 있다. 
  • 여기서 remove와 discard의 차이점은 없는 내용을 요청할 때, remove는 오류를 반환하고, discard는 오류를 반환하지 않는다는 특징이 있다. 
# 두 리스트가 공유하는 원소를 찾는 코드로 리스트를 set을 사용하여 집합으로 변환

def find_common_elements(list1, list2):
    set1 = set(list1)
    set2 = set(list2)
    common_elements = set1.intersection(set2)
    return common_elements


list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]
common_elements = find_common_elements(list1, list2)
print("두 리스트에 공통된 요소 :", common_elements)

 

딕셔너리

  • 딕셔너리는 사전과 같으며 key와 값(value)의 쌍으로 데이터를 저장하는 구조이다. 집합과 유사하게 중괄호{}를 이용하여 생성하며, 각 원소에 접근하는 것이 허용되지 않는다. 각 원소들은 쉼표로 구분하나, 콜룸:을 활용하여 표현한다. 
mydict = {"key1" : "value1", "key2" : "vale2"}
  • 동일한 키가 여러번 입력될 수 는 있으나, 하나의 키가 두번이상 나오면 마지막에 나오는 키의 값을 저장한다. 
  • 딕셔너리는 순서가 없기 때문에 index 함수는 사용이 불가하며, key를 통해서만 접근 할 수 있고 원소를 추가할 때도 key를 이용해서만 추가할 수 있다. 
mydict = {"Tom" : "New York", "Jane" : "Chicago", "Bill" : "Boston"}
print(mydict["Tom"])
mydict["Jack"] = "LA"
print(mydict)
  • 딕셔너리와 관련된 함수는 clear, copy, fromkeys, get, items, keys, values, pop, popitem, setdefault, update, len 등이 있다. 

파이썬 자료구조
파이썬의 자료구조