Python_2. 자료구조

drrobot409·2021년 5월 29일
0

Python

목록 보기
2/10

자료구조

리스트

  • 리스트는 다양한 자료형을 한 곳에 묶어두는 역할을 한다.
  • [ ]를 통해 묶어서 리스트를 선언할 수 있으며, 서로 다른 자료형을 하나의 리스트에 저장하는 것도 가능하다.
name = ["철수", "영희", "민수"] # 리스트 선언
score = [90, 96, 40]

name.append("예슬") # 리스트 맨 뒤에 새로운 값 저장
score.append(80)

name.insert(3, "동준") # 원하는 index를 지정하여 새로운 값 저장
score.insert(3, 75)

name.pop() # 리스트 맨 뒤 값 삭제

print(name.count("영희")) # 해당 값이 리스트 내에 몇 개 존재하는지 카운트

# name에서 민수의 index를 가져온 뒤 score에서 해당 index로 조회
print("민수 점수 : " + str(score[name.index("민수")]))
# 민수 점수 : 40
num = [5, 3, 4, 2, 1] # 리스트 선언
num.sort() # 오름차순 정렬
num.reverse() # 역순
num.clear() # 리스트 내용 삭제
num_2 = [6, 7, 8, 9, 10]
num.extend(num_2) # 리스트 확장(합치기)

사전

  • 사전(dictionary)은 key와 value로 구성되어 있다.
  • 각 value는 각자의 key를 갖고 있으며 key는 중복될 수 없다.
  • key를 통해 해당하는 value를 조회할 수 있다.
    • value를 통해 key를 조회할 수는 없다.
  • {}를 통해 사전을 선언할 수 있으며 ':'를 기준으로 앞은 key, 뒤는 value를 의미한다.
# 사전 선언
capital = {"대한민국":"서울", "미국":"워싱턴", "일본":"도쿄", "중국":"베이징"} 

print(capital)
# {'대한민국': '서울', '미국': '워싱턴', '일본': '도쿄', '중국': '베이징'}

# key를 통한 value 조회
## 방법 1
print(capital["중국"]) # 베이징
## 방법 2
print(capital.get("대한민국")) # 서울
## 방법 1의 경우 입력한 key가 존재하지 않을 경우 에러를 출력하며 코드 실행이 중지된다.
## 방법 2의 경우 입력한 key가 존재하지 않을 경우 None을 출력하며 코드 실행이 지속된다.
## 방법 2의 .get()은 입력한 key가 존재하지 않을 경우 대체 출력할 값을 지정할 수 있다.
print(capital.get("부산", "잘못된 key")) # 잘못된 key

# key가 사전에 포함되어 있는지 확인
print("영국" in capital) # False

# 새로운 key와 해당하는 value 저장
capital["영국"] = "런던"

# 이미 있는 key일 경우 value만 수정된다.
capital["일본"] = "동경"

# key와 해당하는 value 삭제
del capital["미국"]

# 사전에 포함된 key 확인
print(capital.keys()) 

# 사전에 포함된 value 확인
print(capital.values()) 

# key와 value 묶어서 확인
print(capital.items()) 

# 사전 초기화
capital.clear() 

튜플

  • 튜플은 list와 비슷하지만 내용을 추가하거나 수정할 수 없다.
  • 하지만 list보다 속도가 빠르다.
  • ()로 튜플 선언이 가능하다.
# 튜플 선언
food = ("짜장면", "짬뽕")

print(food) # ('짜장면', '짬뽕')
print(menu[0]) # 짜장면

# 내용 수정이 불가능하다.
food.add("탕수육") # 에러

# 변수 여러개를 한 번에 선언할 때 유용하다.
food, price, is_spicy = ("짜장면", 6000, False)
print(food) # 짜장면
print(price) # 6000
print(is_spicy) # False

세트

  • 세트는 집합을 의미한다.
  • 중복이 안되고 순서가 존재하지 않는다.
  • {}를 이용하여 세트를 선언할 수 있다.
# 집합이기 때문에 중복은 자동으로 제거되며 순서 또한 자동으로 정렬된다.
my_set = {5, 5, 5, 1, 1, 1, 2, 2, 3, 3, 3, 0, 0, 0}
print(my_set) 
# => 0, 1, 2, 3, 5


# 세트 선언
## 방법 1
menu = {"짜장면", "짬뽕", "탕수육"}
## 방법 2
favorite = set(["짜장면", "냉면"])

# 교집합 (메뉴 중 좋아하는 음식 찾기)
## 방법 1
print(menu & favorite)
## 방법 2
print(menu.intersection(favorite))
# => 짜장면

# 합집합 (메뉴에 있거나 좋아하는 음식)
## 방법 1
print(menu|favorite)
## 방법 2
print(menu.union(favorite))
# => 짜장면, 탕수육, 짬뽕, 냉면

# 차집합 (메뉴에 있지만 좋아하지 않는 음식)
## 방법 1
print(menu - favorite)
## 방법 2
print(menu.difference(favorite))
# => 탕수육, 짬뽕

# 좋아하는 음식에 칼국수 추가
favorite.add("칼국수")

# 좋아하는 음식에서 냉면 삭제
favorite.remove("냉면")

자료 구조의 변경

  • 앞서 배운 세트, 리스트, 튜플은 서로 자료 구조 변경이 가능하다.
# 세트 선언
food = {"짜장면", "짬뽕", "탕수육"}
print(food, type(food))
# => {'짜장면', '탕수육', '짬뽕'} <class 'set'>

# 리스트로 변경
food = list(food)
print(food, type(food))
# => ['짜장면', '탕수육', '짬뽕'] <class 'list'>

# 튜플로 변경
food = tuple(food)
print(food, type(food))
# => ('짜장면', '탕수육', '짬뽕') <class 'tuple'>

# 다시 세트로 변경
food = set(food)
print(food, type(food))
# => {'짜장면', '탕수육', '짬뽕'} <class 'set'>

연습문제

  • 손님 20명 중 추첨을 통해 1명은 탕수육을, 3명은 짜장면을 준다고 할 때, 당첨자를 뽑아낼 코드를 작성하기.
    • 규칙 1 : 아이디는 편의상 1~20으로 설정
    • 규칙 2 : 중복 당첨은 불가능
    • 규칙 3 : random 모듈의 shuffle과 sample 활용
# random 모듈 불러오기
from random import *

# 1~20의 id_list 생성
id_list = list(range(1, 21))

# id_list 순서 섞기
shuffle(id_list)

# id_list에서 4명을 무작위로 뽑아서 win에 저장
win = sample(id_list, 4)

# 당첨자 발표
print(f'''
당첨자 발표
탕수육 당첨자 : {win[0]}
짜장면 당첨자 : {win[1]}, {win[2]}, {win[3]}
''')
profile
개발자로 자기 개발 중

0개의 댓글