오늘의 파이썬 강좌는 자료 구조에 대해 배우기
리스트, 사전, 튜플, 세트에 대해 각각 배우고
서로의 타입을 변경까지 하기
결론적으로 리스트와 사전을 가장 많이
사용할 것 같음
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. 나도코딩)_강의소개
'Programming > Python' 카테고리의 다른 글
[Python] 파이썬 기초 공부 07 (feat. 나도코딩)_함수 (0) | 2020.04.21 |
---|---|
[Python] 파이썬 기초 공부 06 (feat. 나도코딩)_If 조건문, for/while 반복문 (0) | 2020.04.16 |
[Python] 파이썬 기초 공부 04 (feat. 나도코딩)_문자열 (0) | 2020.04.14 |
[Python] 파이썬 기초 공부 03 (feat. 나도코딩)_연산자와 함수 (0) | 2020.04.13 |
[Python] 파이썬 기초 공부 02 (feat. 나도코딩)_설치와 자료형 배우기 (0) | 2020.04.09 |