독학 3일차....시간당 이해량이 점점 떨어지고...하루에 30분 정도의 내용을 소화하고 있다...ㅠㅠ
처음에 이해가 잘 되지 않아 몇 번이고 반복해서 보면서, 리스트(LIST), 사전(dictionary), 튜플(tuple), 집합(Set) 에 대해 개별적인 이해 보다 4가지 유형의 구분 및 사용처에 대해 전체적인 이해가 필요하다는 결론을 얻었다.
리스트 (LIST) |
사전 (dictionary) |
튜플 (tuple) |
집합 (Set) |
|
표기 방법 |
대괄호 [ ] | {key : value} | 소괄호 ( ) | 중괄호 { } |
표기 예 | [10, 20, 30, 100] | {"A-1":"자바", "B-3":"파이썬"} | (10, 30, 50) | {10, 20, 30, 50} |
특 징 | 순서의 개념을 가지고 있음. 중복된 DATA도 순서가 다르므로 구별하여 가질수 있음. |
Key 와 Value 간의 1:1 매칭. Key 가 기준이므로 Key 중복 안됨 |
변경이 안되는 목록 리스트보다 속도가 빠름 |
중복된 DATA가 들어오면 1개로 보이며(중복 X), 순서에 대한 개념이 없어 조회 시 마다 결과 값 순서가 다르게 나옴 |
: 순서를 가지는 객체의 집합, 대괄호( [ ] ) 로 표시, 중복된 DATA 가질 수 있음.
[10, 20, 30, 100, 30, 40]
#지하철 칸별로 10명, 20명, 30명에 대한 표기
- 방법 1 변수 선언
subway1 = 10
subway2 = 20
subway3 = 30
print(subway1, subway2, subway3)" # 결과 값 : [10, 20, 30]
- 방법 2 리스트 사용
subway = [10, 20, 30]
print(subway)" # 결과 값 : [10, 20, 30]
* 방법 1,2 를 통해 두 코딩의 결과가 같음을 알 수 있다.
# 지하철에 앞 칸 부터 유재석, 조세호, 박명수 가 한칸씩 타고 있을 때
subway = ["유재석", "조세호", "박명수"]
print(subway) # 결과 값 : ['유재석', '조세호', '박명수']
# 조세호 씨가 몇번째에 타고 있는지 확인
print(subway) # 결과 값 : ['유재석', '조세호', '박명수']
print(subway.index("조세호")) # 결과 값 : 1
# 하하씨가 다음 정류장에서 마지막 칸에 탐
print(subway) # 결과 값 : ['유재석', '조세호', '박명수']
subway.append("하하")
print(subway) # 결과 값 : ['유재석', '조세호', '박명수', '하하']
# 정형돈씨를 유재석 / 조세호 사이에 태워봄
print(subway) # 결과 값 : ['유재석', '조세호', '박명수', '하하']
subway.insert(1,"정형돈")
print(subway) # 결과 값 : ['유재석', '정형돈', '조세호', '박명수', '하하']
# 지하철에 있는 사람을 한 명씩 뒤에서 부터 내림
print(subway) # 결과 값 : ['유재석', '정형돈', '조세호', '박명수', '하하']
print(subway.pop()) # 결과 값 : 하하
print(subway) # 결과 값 : ['유재석', '정형돈', '조세호', '박명수']
# 같은 이름의 사람이 몇 명 있는지 확인(맨 마지막에 유재석을 추가로 태움)
print(subway) # 결과 값 : ['유재석', '정형돈', '조세호', '박명수']
subway.append("유재석")
print(subway) # 결과 값 : ['유재석', '정형돈', '조세호', '박명수', '유재석']
print(subway.count("유재석")) # 결과 값 : 2
# 정렬도 가능
num_list = [5, 2, 4, 3, 1]
print(num_list) # 결과 값 : [5, 2, 4, 3, 1]
num_list.sort()
print(num_list) # 결과 값 : [1, 2, 3, 4, 5]
# 역으로 정렬도 가능(순서 뒤집기)
print(num_list) # 결과 값 : [1, 2, 3, 4, 5]
num_list.reverse()
print(num_list) # 결과 값 : [5, 4, 3, 2, 1]
# 모두 지우기(리스트 내에 DATA 전체 삭제)
print(num_list) # 결과 값 : [5, 4, 3, 2, 1]
num_list.clear()
print(num_list) # 결과 값 : []
# 다양한 자로형 함께 사용 가능
mix_list = ["조세호", 20, True]
print(mix_list) # 결과 값 : ['조세호', 20, True]
# 리스트 확장 가능(리스트 간의 병합)
num_list = [5, 2, 4, 3, 1]
print(num_list) # 결과 값 : [5, 2, 4, 3, 1]
mix_list = ["조세호", 20, True]
print(mix_list) # 결과 값 : ['조세호', 20, True]
num_list.extend(mix_list)
print(num_list) # 결과 값 : [5, 2, 4, 3, 1, '조세호', 20, True]
: key 와 value 가 1:1 매칭, key 값 중복 안됨. 중괄호( {} )로 표시
{ "key1" : "value1", "key2" : "value2" }
cabinet = {3:"유재석", 100:"김태호"}
# 와 같은 값이 정의 되었을 때, 해당 value를 조회 하는 방법
# 방법 1
cabinet = {3:"유재석", 100:"김태호"}
print(cabinet[3]) # 결과 값 : 유재석
print(cabinet [100]) # 결과 값 : 김태호
#방법 2
cabinet = {3:"유재석", 100:"김태호"}
print(cabinet.get(3)) # 결과 값 : 유재석
# 방법 1,2의 차이점 : 없는 key 값을 실행할 경우, print(cabinet[5]) 는 결과가 없을 때 Error 나오며 프로그램 종료된 이후 문장 실행 안함.
print(cabinet.get(5)) None 출력 후, 이후 프로그램 실행 * None 대신 다른 문구 출력하고 싶은 경우, print(cabinet.get(5, "사용가능")) 으로 입력할 경우, 사용 가능 출력
print(3 in cabinet) # 결과 값 : True / key in 변수= > key 값이 있을 경우, Ture, 업을 경우 False
print(5 in cabinet) # 결과 값 : False
#string 도 가능(문자)
# 목욕탕에서 사물함과 사용자 확인
cabinet = {"A-3":"유재석", "B-100":"김태호"}
print(cabinet["A-3"]) # 결과 값 : 유재석
print(cabinet["B-100"]) # 결과 값 : 김태호
# 새 손님
cabinet = {"A-3":"유재석", "B-100":"김태호"}
print(cabinet["A-3"]) # 결과 값 : 유재석
cabinet["A-3"] = "김종국" # 기존에 A-3 : 유재석이 김종국으로 Update
cabinet["C-20"] = "조세호" # 없는 C-20 은 조세호 입력
print(cabinet["A-3"]) # 결과 값 : 김종국
print(cabinet["B-100"]) # 결과 값 : 김태호
print(cabinet["C-20"]) # 결과 값 : 조세호
# 간 손님
cabinet = {"A-3":"유재석", "B-100":"김태호"}
print(cabinet["A-3"]) # 결과 값 : [유재석]
del cabinet["A-3"] # A-3 삭제(손님 나감)
print(cabinet["A-3"]) # 결과 값 : []
# key 들만 출력
cabinet = {"A-3":"유재석", "B-100":"김태호", "C-20":"조세호"}
print(cabinet.keys()) # 결과 값 : dict_keys(['B-100', 'C-20'])
# Value 들만 출력
cabinet = {"A-3":"유재석", "B-100":"김태호", "C-20":"조세호"}
print(cabinet.values()) # 결과 값 : dict_values(['김태호', '조세호'])
# 모두 출력
cabinet = {"A-3":"유재석", "B-100":"김태호", "C-20":"조세호"}
print(cabinet.items()) # 결과 값 : dict_items([('B-100', '김태호'), ('C-20', '조세호')])
# 목욕탕 폐점
cabinet.clear()
print(cabinet) # 결과 값 : {}
- 변경되지 않는 목록 일 때 사용. 추가, 변경 안됨. 속도가 LIST 보다 빠름, 소괄호 ( () ) 사용.
menu = ("돈까스", "치즈돈까스")
print(menu[0]) # 결과 값 : 돈까스
print(menu[1]) # 결과 값 : 치즈돈까스
#menu.add("생선까스") # 해당 코딩 실행 시, Error / 튜플은 추가가 안 되기 때문에
# 사용 예
name = "김종국"
age = 20
hobby ="코딩"
print(name, age, hobby) # 결과 값 : 김종국 20 코딩
# 서로 다른 변수에 서로 다른 Value 값을 넣을 수 있음.
name, age, hobby = "김종국", 20, "코딩" # name, age, hobby = ("김종국", 20, "코딩") 형태로 튜플 type
print(name, age, hobby) # 결과 값 : 김종국 20 코딩
: 중복이 안되고 순서가 없음. 중괄호 ( {} ) 사용.
my_set = {1,2,3,3,3}
print(my_set) # 결과 값 : {1, 2, 3}
java = {"유재석","김태호","양세형"}
python = set(["유재석", "박명수"]) # 리스트 형태로 작성 후, set 으로 type 변경 가능
# 집합 간 표기 방법
print(java) # 결과 값 : {'김태호', '유재석', '양세형'} print(python) # 결과 값 : {'박명수', '유재석'} |
|
# 교집합(Java 와 Python 모두 가능) print(java & python) print(java.intersection(python)) # 결과 값 : {'유재석'} |
|
# 합집합(Java 와 Python 중 하나를 할 수 있는) print(java | python) print(java.union(python) # 결과 값 : {'유재석', '박명수', '김태호', '양세형'} |
|
# 차집합 (Java 만 할 수 있는) print(java - python) print(java.difference(python)) # 결과 값 : {'양세형', '김태호'} |
|
# Python 추가 print(python) = {'박명수', '유재석'} python.add("김태호") print(python) # 결과 값 : {'박명수', '유재석', '김태호'} |
|
# Java를 제외 print(java) # 결과 값 : {'김태호', '유재석', '양세형'} java.remove("김태호") print(java) # 결과 값 : {'유재석', '양세형'} |
5. 자료 구조의 변경
: 위의 내용과 같이 상황에 따른 자료 구조를 사용해야 하며, 각각의 구조를 다음 구문으로 변경할 수 있다.
menu = {"커피", "우유", "주스"}
print(menu, type(menu)) # 결과 값 : {'주스', '커피', '우유'} <class 'set'>
menu = list(menu)
print(menu, type(menu)) # 결과 값 : ['주스', '커피', '우유'] <class 'list'>
menu = tuple(menu)
print(menu, type(menu)) # 결과 값 : ('주스', '커피', '우유') <class 'tuple'>
menu = set(menu)
print(menu, type(menu)) # 결과 값 : {'주스', '커피', '우유'} <class 'set'>
------------------------------------------------------------------------------------------------------------------------------
Quiz 4. 댓글 장석자들 중에 추첨을 통해 1명은 치킨, 3명은 커피 쿠폰을 받게 됩니다.
추천 프로그램을 작성하시오.
조건 1 : 편의 상 20명이 작성하였고, 아이디는 1~20 이라고 가정
조건 2 : 댓글 내용과 상관없이 무작위로 추첨하되 중복 불가
조건 3 : rondom 모듈의 shuffle 과 sample 을 활용
------------------------------------------------------------------------------------------------------------------------------
(출력 예제)
-- 당첨자 발표 --
치킨 당첨자 : 1
커피 당첨자 : [2, 3, 4]
-- 축하합니다 --
(활용 예제)
from random import *
lst = [1,2,3,4,5]
print(lst)
shuffle(lst)
print(lst)
print(sample(lst,1))
------------------------------------------------------------------------------------------------------------------------------
Ans 1. 내가 작성한 코딩(실패. 활용 예제 내에서 막힘)
: 결론, 풀이에 대한 접근이 잘못됨. 활용 예제에 있는 sample 값 추출 후, 당첨자를 리스트 내에서 삭제 하지 못함.
치킨 1명 추첨 후, 리스트 내에서 삭제를 진행하려 했으나, 랜덤으로 추첨한 결과를 리스트 내에서 삭제 하지 못해 막힘.(결과 값으로 삭제는 가능하나, 변수로는 삭제가 안됐음....나중에 실력이 늘면 해당 방법으로도 가능한지 다시 도전)
from random import *
lst = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
print(lst)
shuffle(lst)
print(lst)
print(sample(lst,1))
# 1개 선택을 완료 했으나, 해당 값을 리스트 내에서 삭제 하지 못했다...지우는 방법이라고는 pop() 밖에 몰라서....ㅠㅠ
chi =lst.pop()
print(chi)
# pop 형태로 한개씩 변수 선언하며 해보려고도 했으나, 해당 방법으로는 [출력 예제] 형식으로 결과 값을 만들어 내지 못하는 형태였음...결국 gg...였으나, 나도코딩님의 중복이 안되는 결과이기 때문에 한번에 4개의 랜덤 값(치킨 1, 커피 3)을 추출해 낸다는 내용은 어메이징했음....
Ans 2. 나도코딩 님 답안
from random import *
users = range(1,21) #1부터 20까지 숫자를 생성
#print(type(users))
users = list(users) # 생성된 users 가 range 형식이기 때문에 list 형식으로 변경
#print(type(users))
print(users) # 결과 값 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
shuffle(users)
print(users) # 결과 값 : [9, 18, 7, 6, 2, 14, 8, 17, 20, 5, 12, 15, 19, 16, 3, 13, 1, 4, 10, 11]
winners = sample(users, 4) # 4명 중에서 1명은 치킨, 3명은 커피
print (" -- 당첨자 발표 --")
print("치킨 당첨자 : {0}" .format(winners[0]))
print("커피 당첨자 : {0}" .format(winners[1:]))
print (" -- 축하합니다. --")
'''# 결과 값 :
-- 당첨자 발표 --
치킨 당첨자 : 11
커피 당첨자 : [5, 13, 15]
-- 축하합니다. --
'''
FeedBack
명령어를 단순히 사용하는 것도 중요하지만, 결과 도출을 위한 접근법도 중요하다...
4개를 한번에 뽑을 줄이야......ㅋㅋ
유튜버 '나도코딩' 님의 영상을 보며 공부 및 노트 작성합니다.
함께 공부해 나가실 분은
[Python 파이썬 독학 5일차] (0) | 2020.09.23 |
---|---|
[Python 파이썬 독학 4일차] (0) | 2020.09.22 |
[Python 파이썬 독학 2일차] (0) | 2020.09.22 |
[Python 파이썬 독학 1일차] 1-2 (0) | 2020.09.22 |
[Python 파이썬 독학 1일차] 1-1 (0) | 2020.09.22 |
댓글 영역