본문 바로가기

Python/나도코딩

[Python 파이썬] 나도코딩 코딩강의 따라하기 (기본편) 5장

728x90
반응형

본 코딩강의에서 배운 5장 목차는 다음과 같다.

 

5-1. 리스트

5-2. 사전

5-3. 튜플

5-4. 세트(set)

5-5. 자료구조의 변경

5-6. 퀴즈 #4

 

 

https://www.youtube.com/watch?v=kWiCuklohdY 

출처: 파이썬 코딩 무료 강의 (기본편) - 6시간 뒤면 여러분도 개발자가 될 수 있어요 [나도코딩]

 

5-1. 리스트 : [ , , , ....]

  • index() : 몇 번째에 위치하는지 반환
  • append() : 리스트 맨 뒤에 원소 추가
  • insert(n, "추가요소") : n번째에 추가
  • pop() : 리스트 맨 뒤 원소 삭제
  • count() : 리스트에 속한 횟수 반환
  • sort() : 정렬 (오름차순)
  • reserve() : 뒤집기 정렬 (내림차순)
  • clear() : 리스트 모두 지우기
  • extend() : 여러 리스트를 하나의 리스트로 합치기

 

# 지하철 칸별로 10명, 20명, 30명
subway = [10, 20, 30]
print(subway)

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

# 조세호씨가 몇 번째 칸에 타고 있는가?
print(subway.index("조세호"))

# 하하씨가 다른 정류장에서 다음 칸에 탐
subway.append("하하") # 맨 뒤에 더해주는 함수
print(subway)

# 정형돈씨는 유재석 / 조세호 사이에 태워봄
subway.insert(1, "정형돈")
print(subway)

# 지하철에 있는 사람을 한 명씩 뒤에서 꺼냄
print(subway.pop()) # 맨 뒤에 한 명을 뺌
print(subway)

# 같은 이름의 사람이 몇 명 있는지 확인
subway.append("유재석")
print(subway)
print(subway.count("유재석")) # 유재석이 나온 횟수

# 정렬도 가능
num_list = [5, 2, 4, 3, 1]
num_list.sort()
print(num_list)

# 순서 뒤집기 가능
num_list.reverse()
print(num_list)

# 모두 지우기
num_list.clear()
print(num_list) # 빈 리스트

# 다양한 자료형 함께 사용
num_list = [5, 2, 4, 3, 1]
mix_list = ["조세호", 20, True]
# print(mix_list)

# 리스트 확장 -> 하나의 리스트로 합치는 것도 가능
num_list.extend(mix_list)
print(num_list)
더보기
더보기

[실행결과]

 

[10, 20, 30]


['유재석', '조세호', '박명수']


1  <--- "조세호"의 위치


['유재석', '조세호', '박명수', '하하']    <--- append() 함수를 이용하여 추가
['유재석', '정형돈', '조세호', '박명수', '하하']   <--- insert() 함수를 이용하여 1번째에 추가


하하  <--- 맨 뒤 요소 제거하여 출력

['유재석', '정형돈', '조세호', '박명수']   <-- "하하" 삭제됨


['유재석', '정형돈', '조세호', '박명수', '유재석']  <--- append() 함수를 이용하여 추가
2      <--- "유재석"이 나온 횟수


[1, 2, 3, 4, 5]     <--- sort() 함수를 이용한 오름차순 정렬
[5, 4, 3, 2, 1]     <--- reverse() 함수를 이용한 내림차순 정렬


[]   <-- clear()로 인한 빈 리스트


[5, 2, 4, 3, 1, '조세호', 20, True]    <--- extend()함수를 이용하여 하나의 리스트로 합치기

 

5-2. 사전 : { , , , .... }

  • 사전의 값을 가져올 때 :       1. 변수명[위치]          2. 변수명.get(위치)
  • 1번 방법으로 에러가 발생할 때 → 오류를 출력하고 프로그램을 종료
  • 2번 방법으로 에러가 발생할 때 → None을 출력하고 계속 이어나감
  • key in 변수명 : 해당 key가 있으면 True, 없으면 False 반환
  • del 변수명[key] : 해당 key의 값이 제거됨
  • 변수명.keys() : key값들만 출력하는 함수
  • 변수명.values() : value값들만 출력하는 함수
  • 변수명.items() : key value 쌍으로 출력하는 함수
  • 변수명.clear() : 모든 값을 지우는 함수

 

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

# 값 가져오기
print(cabinet[3])
print(cabinet[100])

print(cabinet.get(3))
print(cabinet[5]) # 오류 출력 -> 프로그램 종료
print(cabinet.get(5)) # None 출력 -> 계속 이어나갈 수 있음
print(cabinet.get(5, "사용 가능")) # 기본값(None) 대신 다른 문자 출력
print("hi")

print(3 in cabinet) # key in 변수 -> True
print(5 in cabinet) # False

# key값은 정수가 아닌 문자열(String)도 가능
cabinet = {"A-3":"유재석", "B-100":"김태호"}
print(cabinet["A-3"])
print(cabinet["B-100"])

# 새 손님
print(cabinet)
# cabinet에 "C-20"이라는 key를 만들어 값을 넣음 (사용중이면 값이 update)
cabinet["A-3"] = "김종국" # "유재석"이라는 값을 빠지고 "김종국"이 들어옴
cabinet["C-20"] = "조세호"
print(cabinet)

# 간 손님 (key 삭제)
del cabinet["A-3"] # key "A-3"에 해당되는 값은 지워짐
print(cabinet)

# key 들만 출력
print(cabinet.keys())

# value 들만 출력
print(cabinet.values())

# key, value 쌍으로 출력
print(cabinet.items())

# 목욕탕 폐점
cabinet.clear() # 모든 값을 지움
print(cabinet) # 빈 값 출력
더보기
더보기

[실행결과]

 

유재석   <-- key: 3에 해당하는 값
김태호   <-- key: 100에 해당하는 값


유재석   <-- key: 3에 해당하는 값

 

Traceback (most recent call last):                     <--- 1번 방법 에러
  File "c:/Users/User/OneDrive/Desktop/PythonWorkspace/5장.py", line 60, in <module>
    print(cabinet[5]) # 오류 출력 -> 프로그램 종료
KeyError: 5

 

None                                                           <--- 2번 방법 에러

사용 가능         <---- 기본값(None) 대신 다른 문자로 출력

hi


True    <--- key값 3이 cabinet안에 있음
False   <--- key값 5이 cabinet안에 없음


유재석
김태호


{'A-3': '유재석', 'B-100': '김태호'}
{'A-3': '김종국', 'B-100': '김태호', 'C-20': '조세호'} <-- 키 A-3이 김종국"으로 바뀌고 키 C-20인 "조세호"가 들어옴

 

{'B-100': '김태호', 'C-20': '조세호'}   <-- 키 값이 A-3인 원소가 삭제됨


dict_keys(['B-100', 'C-20'])   <-- key값들만 출력
dict_values(['김태호', '조세호'])   <--- value값들만 출력
dict_items([('B-100', '김태호'), ('C-20', '조세호')])    <--- (key, value) 쌍으로 출력


{}   <-- 빈 사전 출력

 

5-3. 튜플 : ( , , , ... )

: (리스트와 달리) 내용 변경이나 출력을 할 수 없음, But 리스트보다 속도가 빠름!

 

menu = ("돈까스", "치즈까스")
print(menu[0])
print(menu[1])

# name = "김종국"
# age = 20
# hobby = "코딩"
# print(name, age, hobby)

# 한 번에 값을 선언할 수 있음
(name, age, hobby) = ("김종국", 20, "코딩") 
print(name, age, hobby) 
더보기
더보기

[실행결과]

 

돈까스
치즈까스


김종국 20 코딩

 

5-4. 세트(set) = 집합

: 중복 안 됨, 순서 없음

 

집합 A, B가 있다고 가정하면,

  • 교집합 :  방법1) A & B      방법2) A.intersection(B)
  • 합집합 :  방법1) A | B        방법2) A.union(B)
  • 차집합 :  방법1) A - B        방법2) A.difference(B)
  • add() : set에 값 추가하는 함수
  • remove() : set에 값 제거하는 함수

 

my_set = {1, 2, 3, 3, 3} # 값만 나열
print(my_set) # 중복 생략하여 출력됨

java = {"유재석", "김태호", "양세형"}
python = set(["유재석", "박명수"])

# 교집합 (java와 python을 모두 할 수 있는 개발자)
print(java & python)
print(java.intersection(python))

# 합집합 (java도 할 수 있거나 python 할 수 있는 개발자)
print(java | python)
print(java.union(python))

# 차집합 (java 할 수 있지만 python은 할 줄 모르는 개발자)
print(java - python)
print(java.difference(python))

# python 할 줄 아는 사람이 늘어남
python.add("김태호") # set에 값 추가
print(python)

# java 를 잊었어요
java.remove("김태호") # 값을 제거
print(java)
더보기
더보기

[실행결과]

 

{1, 2, 3}      <--- 중복된 값 없이 출력됨

 

----- 교집합 결과 ----
{'유재석'}
{'유재석'}

 

----- 합집합 결과 ----
{'양세형', '유재석', '박명수', '김태호'}
{'양세형', '유재석', '박명수', '김태호'}

 

----- 차집합 결과 ----
{'양세형', '김태호'}

{'양세형', '김태호'}


{'유재석', '박명수', '김태호'}   <--- add()함수를 이용하여 맨 뒤에 추가
{'양세형', '유재석'}    <--- remove()함수를 이용하여 맨 뒤 값 제거

 

5-5. 자료구조의 변경

# 커피숍
menu = {"커피", "우유", "주스"} # set로 설정
print(menu, type(menu))

menu = list(menu) # type을 list로 바꾸기
print(menu, type(menu))

menu = tuple(menu) # type을 tuple로 바꾸기
print(menu, type(menu))

menu = set(menu) # type을 set로 다시 바꾸기
print(menu, type(menu))
더보기
더보기

[실행결과]

 

{'주스', '커피', '우유'} <class 'set'>
['주스', '커피', '우유'] <class 'list'>
('주스', '커피', '우유') <class 'tuple'>
{'커피', '주스', '우유'} <class 'set'>

 

5-6. 퀴즈 #4 : 당신의 학교에서는 파이썬 코딩 대회를 주최합니다. 참석률을 높이기 위해 댓글 이벤트를 진행하기로 하였습니다. 댓글 작성자들 중에 추첨을 통해 1명은 치킨, 3명은 커피 쿠폰을 받게 됩니다. 추첨 프로그램을 작성하시오.

  • 조건1 : 편의상 댓글을 20명이 작성하였고 아이디는 1~20 이라고 가정
  • 조건2 : 댓글 내용과 상관 없이 무작위로 추첨하되 중복 불가
  • 조건3 : random 모듈의 shuffle과 sample을 활용

 

(출력 예제)

-- 당첨차 발표 --

치킨 당첨자 : 1

커피 당첨자 : [2, 3, 4]

-- 축하합니다 --

 

  • range(a, b) : a부터 b이전까지 범위를 나타냄 → [a, b)

 

 

from random import *
users = range(1, 21) # 1부터 20까지 숫자를 생성
# print(type(users)) # type이 range가 나옴
users = list(users) # list 타입으로 바뀜
# print(type(users))

print(users)
shuffle(users) # 무작위로 섞기
print(users)

winners = sample(users, 4) # 4명 중에서 1명은 치킨, 3명은 커피
print(" -- 당첨자 발표 -- ")
print("치킨 당첨자 : {0}".format(winners[0])) # winners에 있는 첫 번째 당첨자
print("커피 당첨자 : {0}".format(winners[1:]))
print(" -- 축하합니다 -- ")
더보기
더보기

[실행결과]

 

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]     <--- 아이디 출력
[8, 6, 15, 17, 1, 11, 16, 5, 12, 13, 10, 7, 19, 9, 18, 4, 3, 20, 2, 14]     <--- 무작위로 섞어서 아이디 출력


 -- 당첨자 발표 --
치킨 당첨자 : 6                      <---- 뽑힌 4명 중에서 1명을 치킨 당첨자로 출력
커피 당첨자 : [5, 15, 14]          <---- 나머지 3명을 커피 당첨자로 출력
 -- 축하합니다 --

 

728x90
반응형