본문 바로가기

Programming/Python

[Python] 파이썬 기초 공부 05 (feat. 나도코딩)_자료 구조

728x90

오늘의 파이썬 강좌는 자료 구조에 대해 배우기

리스트, 사전, 튜플, 세트에 대해 각각 배우고

서로의 타입을 변경까지 하기

결론적으로 리스트와 사전을 가장 많이

사용할 것 같음

 

1. 리스트: [ ]

괄호 안에 순서대로 객체를 나열 하는

 

1) 리스트 정의의 의미

지하철 칸별로 10, 20, 30명이 있을

subway1 = 10

subway2 = 20

subway3 = 30

 

> subway = [10, 20, 30]

 

2) 리스트를 정의하고, 안에 있는 값이 째인지 찾기

“index” 활용

subway = ["유재석", "조세호", "박명수"]

#조세호가 몇 번 째 칸에 있는가?         

print(subway.index("조세호"))  #1 (유재석=0)

 

3) 리스트 정의 추가하기

a. 마지막에 추가: .append(추가 )

b. 중간에 추가: .insert(위치, 추가 )

c. 리스트에서 빼기: .pop()

#하하 탑승

subway.append("하하")

print(subway)  #['유재석', '조세호', '박명수', '하하']

 

#정현돈을 유재석/조세호 사이에 탑승

subway.insert(1, "정형돈")

print(subway) #['유재석', '정형돈', '조세호', '박명수', '하하']

 

#맨 뒷사람 빼기

subway.pop()

print(subway)  #['유재석', '정형돈', '조세호', '박명수']

 

4) 같은 이름의 사람 확인하기: .count(찾는 )

#같은 이름의 사람이 몇 몇인지 확인하기

subway.append("유재석")

print(subway)  #['유재석', '정형돈', '조세호', '박명수', '유재석']

print(subway.count("유재석"))  #2

 

5) 정렬하기

a. 순서대로 정렬: .sort()

b. 순서대로 정렬: .reverse()

#정렬

num_list = [5,2,4,3,1]

num_list.sort()

print(num_list) #[1, 2, 3, 4, 5]

 

#뒤집기

num_list.reverse()

print(num_list)  #[5, 4, 3, 2, 1]

 

5) 리스트 내용 모두 지우기: .clear()

#지우기

num_list.clear()

print(num_list)  #[]

 

6) 다양한 자료형 함께 사용 가능

mix_list = ["조세호", 20, True]

print(mix_list)  #['조세호', 20, True]

 

7) 리스트 합치기: .extend(뒤에 추가하는 리스트 변수)

num_list = [5,2,4,3,1]

num_list.extend(mix_list)

print(num_list) #[5, 2, 4, 3, 1, '조세호', 20, True]

 

2. 사전

1) 구성: {위치 (자료의 위치를 말한다, 중복으로 쓰면 안됨) : 데이터}

2) 데이터를 불러 오는 방법

a. 변수[위치]

b. .get(위치)

c. 차이점: a 오류 에러가 프로그램종료, b 오류 none 출력

d. 추가로, .get(위치, 데이터) 입력하면 오류시 데이터가 출력됨

cabinet = {3:"유재석", 100:"김태호"}

print(cabinet[3])  #유재석

print(cabinet[100])  #김태호

 

print(cabinet.get(3))  #유재석

 

print(cabinet.get(5, "사용가능")) #사용가능

 

3) 사전 내에 키를 쓰고 있는지 확인하기: in 변수

print(3 in cabinet)  #True

print(5 in cabinet)  #False

 

4) 키는 숫자가 아닌 문자형도 가능

cabinet = {"A-3":"유재석", "B-100":"김태호"}

print(cabinet["A-3"])  #유재석

 

5) 데이터를 추가 혹은 교체하기: 변수[위치] = 데이터

# 추가하기

cabinet["C-20"] = "조세호"

print(cabinet)  #{'A-3': '유재석', 'B-100': '김태호', 'C-20': '조세호'}

# 교체하기

cabinet["A-3"] = "김종국"

print(cabinet)  #{'A-3': '김종국', 'B-100': '김태호', 'C-20': '조세호'}

 

6) 데이터를 지우기: del 변수 [위치]

# 지우기

del cabinet["A-3"]

print(cabinet)  #{'B-100': '김태호', 'C-20': '조세호'}

 

7) 현재 사용중인 혹은 데이터 들만 출력

a. 키만 출력: .keys()

b. 데이터만 출력: .values()

c. 키와 데이터 모두 출력: .items()

print(cabinet.keys()) #dict_keys(['B-100', 'C-20'])

print(cabinet.values()) #dict_values(['김태호', '조세호'])

print(cabinet.items()) #dict_items([('B-100', '김태호'), ('C-20', '조세호')])

 

8) 모든 지우기: .clear()

cabinet.clear()

print(cabinet)  #{}

 

3. 튜플: 내용 변경이 안되지만 속도가 빠름: ( )

Vs 리스트; 변수 = [ ] 대괄호 사용

menu = ("돈까스", "치즈까스")

print(menu[0])  #돈까스

print(menu[1]) #치즈까스

 

변수와 데이터를 한번에 정의 있음

(name, age, hobby) = ("김족국", 20, "코딩")

print(name, age, hobby) #김족국 20 코딩

 

4. 세트: 중복이 안되고, 순서가 없음: { }

Vs 사전: {:}

my_set = {1,2,3,3,3,}

print(my_set)  #{1, 2, 3} - 중복 안됨

 

1) 세트의 공통으로 있는 데이터 추출하기: & 혹은 .intersection()

2) 세트 하나만 있은 데이터 추출; | 혹은 .union()

3) 공통으로 있는 데이터 외에 데이터 추출: - 혹은 .difference()

#교집합

print(java & python)  #{'유재석'}

print(java.intersection(python))  #{'유재석'}

 

#합집합

print(java | python)  #{'유재석', '박명수', '양세형', '김태호'}

print(java.union(python)) #{'유재석', '박명수', '양세형', '김태호'}

 

#차집합

print(java - python)  #{'양세형', '김태호'}

print(java.difference(python))  #{'양세형', '김태호'}

 

4) 세트에 데이터 추가하기: .add()

5) 세트에 데이터 빼기: .remove()

print(python) #{'유재석', '박명수'}

python.add("김태호")

print(python) #{'유재석', '김태호', '박명수'}

python.remove("유재석")

print(python)  #{'김태호', '박명수'}

 

5. 자료 구조의 변경

변수 = 구조() 형태로 변경하고 싶은 구조로 변경이 가능

# Set형태로 자료 만들기

menu = {"커피", "우유", "쥬스"}

print(menu, type(menu))   #{'커피', '쥬스', '우유'} <class 'set'>

# list형태로 구조 변경

menu = list(menu)

print(menu, type(menu))   #['커피', '쥬스', '우유'] <class 'list'>

# 튜플형태로 구조 변경

menu = tuple(menu)

print(menu, type(menu))   #('쥬스', '커피', '우유') <class 'tuple'>

# Set형태로 구조 변경

menu = set(menu)

print(menu, type(menu))  #{'커피', '우유', '쥬스'} <class 'set'>

 

6. Quiz

문제: 당신의 학교에서는 파이썬 코딩 대회를 주최합니다.

참석률을 높이기 위해 댓글 이벤트를 진행하기로 하였습니다.

댓글 작성자들 중에 추첨을 통해 1명은 치킨, 3명은 커피 쿠폰을 받게 됩니다.

추첨 프로그램을 작성하시오.

조건1: 편의상 댓글은 20명이 작성하였고 아이디는 1~20명이라고 가정

조건2: 댓글 내용과 상관 없이 무작위로 추첨하되 중복 불가

조건3: random 모듈의 shuffle sample 활용

 

(추가 활용 예제)

from random import *

lst = [1,2,3,4,5]

print(lst)

shuffle(lst)  #무작위로 섞기

print(lst)

print(sample(lst,2))  #lst 에서 2개 추출

 

(정답)

from random import *

users = range(1,21) #1부터 20까지 숫자를 생성

users = list(users)  #리스트로 구조를 변환 시킴

print(users)

shuffle(users)

 

winners = sample(users,4)

 

print("-- 당첨자 발표 --")

print("치킨 당첨자: {0}" .format(winners[0]))

print("커피 당첨자: {0}" .format(winners[1:]))

 

오늘은 여기까지~

점점 더 예전이랑 섞이니깐 헷갈리네요

기억력이랑 응용력이 필요한 시점이에요 ㅠㅠ

 


2020/04/14 - [Programming/Python] - [Python] 파이썬 기초 공부 04 (feat. 나도코딩)_문자열

2020/04/13 - [Programming/Python] - [Python] 파이썬 기초 공부 03 (feat. 나도코딩)_연산자와 함수

2020/04/09 - [Programming/Python] - [Python] 파이썬 기초 공부 02 (feat. 나도코딩)_설치와 자료형 배우기

2020/04/07 - [Programming/Python] - [Python] 파이썬 기초 공부 01 (feat. 나도코딩)_강의소개

728x90