딕셔너리 자료형
- 비 시퀀스 자료형이다.(index를 갖지 않는다.)
- 대신 이 자료형은 고유한 key값을 갖는다.
- 이 key값은 1대 1 매칭되는 value를 갖고, 이를 key-value pair라고 한다.
- {}를 사용해 선언한다.
- 딕셔너리 자료형에서 key는 중복해서 존재하지 않기 때문에 중복해서 넣게 되면 가장 최근에 넣은 key-pair만 남는다
- key로는 문자열,정수,실수,불,튜플을 사용가능.(자료형을 섞어서도 가능하다)
- 단 key에 리스트, 딕셔너리.집합은 사용할 수 없다.
- 그래도 value에는 모든 자료형이 가능하다.
dic_var = {"key" : "value"}
print(type(dic_var))
print(dic_var)
print(dic_var["key"])
dic_var["key"] = "last_value"# 아전값인 value는 사라진다.
print(dic_var["key"])
딕셔너리 함수
- dict() = dictinary자료형 만들 때 많이 사용한다.
- zip() = key만 가지고 있는, value만 가지고 있는 부분으로 나누어 할당가능.
- zip함수는 개수가 맞지 않는 경우 더 작은 쪽으로 맞춰 만들게 된다.(남는 부분은 삭제)
- del 키워드를 통해 key-value pair를 삭제할 수 있다. (dict와 잘 어울리는 삭제명령어라고 하심)
- len() 동일하게 함수를 통해 길이를 구할 수 있다.
#dictionary 생성방식.
empty_dict = {} #또는
empty_dict = dict()# dict()함수로 비어있는 딕셔너리 만들 수 있음.
print(empty_dict)
dict_a = dict(key = 1, key2=2, key3=3) # 이렇게 만들면 key는 문자열로 들어간다.
print(dict_a)
dict_b = dict([(1,"first"),(2,"second")]) # 이렇게 만들수도 있다.
print(dict_b)
dict_c = dict(zip([1,2,3,4,5],["first","second","third"])) #5까지 썼지만 3까지만 만들어짐.
print(dict_c)
dict_c[3] = "last_third" #key로 접근하여 값 변경이 가능하다.
print(dict_c)
dict_c[4] = "new four"#새로운 값 추가하기
print(dict_c)
print(1 in dict_c) # key값이 존재하는지는 찾을 수 있다. value는 이걸로 안됨.
print(len(dict_c))
#dictionary 연습1
fruit = input("과일 이름을 입력하세요. ")
fruit_dict = dict(사과 = 1000, 바나나 = 700 , 오렌지 = 1500 , 파인애플 = 2000)
if fruit in fruit_dict:
print("{}의 가격은 {}원입니다.".format(fruit,fruit_dict[fruit]))
# dictionary 연습2
names = list(input("이름을 기입해주세요.").split())
weights = list(map(float,input("몸무게를 입력해주세요.").split()))
dict_k = dict(zip(names,weights))
print(dict_k)
리스트 생성 응용 list comprehension
- 리스트는 대괄호 안에 for 문을 작성하여 사용할 수 있습니다.
lst_compre = [i for i in range(10)]print(lst_compre)
#list comprehension 예제
prac_result = [i**2 for i in range(1,10)]
print(type(prac_result))
print(prac_result)
# for문 예제
votes = [2,5,3,4,1,5,1,5,5,3]
candidates = ['','전정국','김남준','박지민','정호석','김태형']
candidates_votes = [0]*(len(candidates))
for i in votes:
candidates_votes[i] +=1
winner = candidates_votes.index(max(candidates_votes))
print("{}후보가 총 {}표를 얻어 당선되었습니다.".format(candidates[winner],candidates_votes[winner]))
tuple
- 튜플은 immutable 하다.
- 그래서 조회하는 함수인 count(), index() 함수만 존재한다.
- 튜플 comprehension은 되긴 하는데 사실 튜플이 아니라 generator comprehension이 된다
- 튜플 형으로 변환하려면 tuple()로 감싸줘야한다.
generator_variable = (i for i in range(10)) # iterable한 객체임.
tuple_variable = tuple(i for i in range(10))
print(type(generator_variable),type(tuple_variable))
while True:
first, second = map(int,input("정수 두 개 입력하세요: ").split())
if first>20 or first<1:
print("첫번째 값의 범위는 1~20 입니다.")
elif second >30 or second<10:
print("두번째 값의 범위는 10~30 입니다.")
elif first>= second:
print("첫 번째 입력 값은 두 번째 입력 값보다 작게 입력하세요.")
else:
break
lst_one = [2**i for i in range(first,second+1) if i != first+1 and i != second-1]
print(lst_one)
total=0
for i in range(1,101):
if i %10 == 1 : print("")
if i %2 == 0:
total+= i**2
print("+",i**2,end=" ")
else :
total-= i**2
print("-",i**2,end=" ")
print("\\n=",total,"입니다")
random 라이브러리
- 파이썬 표준 라이브러리 = 파이썬 기본 설치된 모듈과 패키지, 내장 함수를 묶은 놈들.
- random.randint(시작 정수, 끝 정수) 함수를 사용하여 시작 정수부터 끝 정수(포함)까지 범위의 난수를 생성한다.
import random
random_list = [ random.randint(1,4) for _ in range(10)]
print(random_list)
#random 예제
import random
n = int(input("로또 번호 몇 개 드릴까요? "))
for i in range(n):
lotto_list = set()
while len(lotto_list) != 6:
lotto_list.add(random.randint(1,45))
print(lotto_list)
set 자료형
- set 자료형은 중복을 허용하지 않는 자료형이다.
- set()로 선언 가능하다 {}로 선언하면 dict가 되므로 주의
- 순서가 상관없다.
- set comprehension이 가능하다.
- set_variable = {extression for 변수 in iterable if 조건식}으로 사용 가능, dict는 comprehension이 없음. 그래서 되나 봄
- set은 add()를 통해 한 번에 하나의 값만 넣을 수 있다. (순서가 상관없기에 뒤에 추가되고 그런 건 아님)
- remove(요소) 함수를 사용해 값을 삭제할 수 있다.- 없는 값 삭제할 때는 KeyError발생.
- discard(요소) 함수를 사용해 값을 삭제할 수 있다. 없는 값을 삭제할 때도 에러가 발생하지 않는 방식이다.(에러처리를 해준다)
- pop() 순서를 보장하지 않고 반환한 뒤 지운다 (뭐가 지워질 것인지 알 수 없음) (출력해 봤을 때 앞에서부터 출력하는 듯)
- clear() 함수로 요소 전체 삭제 가능.
- len() 길이 출력
- set자료형 끼리 set.union(seta, setb) , | 로 합집합이 가능하다.
- & 와 set.intersection(seta, setb)로 교집합이 가능하다.
- 와 set.difference(seta, setb)로 차집합도 가능하다.
- ^ 와 set.symmetric_difference(set_a, set_b)로 A의 대칭차집합을 구할 수 있다() = 합집합 - 교집합 한 결과임.
- |= 와 set_a.update(set_b)로 합집합을 한 결과를 앞 set_a에 넣어준다.
- &= 와 set_a.intersection_update(set_b)로 교집합 한 결과를 set_a에 넣어준다.
- =와 set_a.difference_update(set_b)로 A-B의 값을 넣어준다.
- ^= 와 set_a.symmetric_difference_update(set_b)로 set_a에 대칭차집합 값을 넣어준다.
- a.issubset(b)를 통해 a가 b의 부분집합인지 물어봐 True False를 출력한다.
- a.issuperset(b)를 통해 a가 b의 상위집합인지 물어봐 True False를 출력한다.
- a> b b <a로 둘이 같을 경우에는 False가 출력되고 한쪽이 다른 한쪽을 포함하는 진부분집합 관계여야 True출력한다.
- ==로 set가 같은지 비교 가능하다.
- a.isdisjoint(b) 겹치는 부분이 없냐를 확인하는 함수 없으면 True 있으면 False
set_ab = set()
set_ab.add(123)
set_ab.add("14dfg")
set_ab.add(1)
set_ab.add(2)
print(set_ab)
print(set_ab.pop())
set_b = set()
set_b.add(1)
set_b.add(2)
print(set_ab|set_b)
print(set.union(set_b,set_ab))
print(set_ab&set_b)
print(set.intersection(set_b,set_ab))
print(set_ab-set_b)
print(set.difference(set_ab,set_b))
set_b.intersection_update(set_ab)
print(set_b)
print(set_b.issubset(set_ab))
print(set_b<set_ab)
set_b.update(set_ab)
print(set_b)
print(set_b<set_ab)
list_sample = [1,2,2,3,3,3,4,4,4,4]
print(set(list_sample))
set_3 = {i for i in range(1,100) if i%3==0 }
set_5 = {i for i in range(1,100) if i%5==0 }
result_set = set.intersection(set_3,set_5)
print(result_set)
role_admin ={i for i in ["회계 관리", "인사 관리","구매 관리","시스템 관리"]}
role_hr = {i for i in ["인사 관리","개인정보 조회","회계 관리","근태 관리"]}
role_user = {i for i in ["개인정보 조회","근태 관리"]}
result = list(set.union(role_admin, role_hr, role_user))
result.sort()
print(result)
print("2부터 입력하신 수까지의 모든 소수를 찾는 프로그램입니다.")
N = int(input("찾는 범위를 입력하세요:"))
for i in range(2,N+1):
Flag = True
for j in range(2,i//2+1):
if i%j == 0 :
Flag = False
if Flag == True:
print(i,end=" ")
'파이썬 > 파이썬 이론' 카테고리의 다른 글
6. Python_Basic - 5 (0) | 2023.04.13 |
---|---|
5. Python_Basic - 4 (0) | 2023.04.13 |
3.Python_Basic - 2 (0) | 2023.04.13 |
2.Python_Basic - 1 (1) | 2023.04.13 |
1.Python_Start (0) | 2023.04.13 |