알쏭달쏭 공부한거 쓰기

7/5일 복습-7/7일 진행 본문

파이썬 -23여름학기(ㄱㅎㅈ)

7/5일 복습-7/7일 진행

elec_cy 2023. 7. 7. 12:17

1)딕셔너리

-딕셔너리로 저장된 자료에서 key값으로 호출할기

-길이len

-이름 출력 vs for i in 이름: 의 차이점> 메뉴판 만들 수 있다.

-딕셔너리 삭제 del 딕셔너리명[key]

-딕셔너리 추가 딕셔너리명 [key]=value >딕셔너리 마지막으로 들어간다.

-딕셔너리[key]vs딕셔너리.get[key]의 차이점> 없는 키에 대해 반환 값이 다르다

-딕셔너리.keys() .values()

 

2)딕셔너리 zip test

    name=['둘리','뽀로로','흰둥이']
    scores=[100,57,43]
    print(zip(name,scores))
    #<zip object at 0x0000027C8D820E80>
    #아마 zip이 보여주는게 주소인듯
    
    print(dict(zip(name,scores)))
    {'둘리': 100, '뽀로로': 57, '흰둥이': 43}
    
    print(list(zip(name,scores)))
    [('둘리', 100), ('뽀로로', 57), ('흰둥이', 43)]
    
    n=zip(name,scores)
    for i in n:
        print(i)
    '''
('둘리', 100)
('뽀로로', 57)
('흰둥이', 43)
   '''
    name=['둘리','뽀로로','흰둥이']
    scores=[100,57,43]
    print(zip(name, scores))
    print(dict(zip(name,scores)))
    print(list(zip(name,scores)))
    
    n=zip(name,scores)
    for i in n:
        print(i)

    print(n) 
    print(list(zip(*n))) 
    print(zip(*n))
    
    '''
<zip object at 0x00000294A1ED0E80>
{'둘리': 100, '뽀로로': 57, '흰둥이': 43}
[('둘리', 100), ('뽀로로', 57), ('흰둥이', 43)]
('둘리', 100)
('뽀로로', 57)
('흰둥이', 43)
<zip object at 0x00000294A1ED1500>
[]
<zip object at 0x00000294A1ED1480>
    '''

얘는 안되는데

얘는 된다.

    name=['둘리','뽀로로','흰둥이']
    scores=[100,57,43]
    print(zip(name, scores))
    print(dict(zip(name,scores)))
    print(list(zip(name,scores)))
    
    n=zip(name,scores)
    print(n) 
    for i in n:
        print(i)

    n=zip(name,scores)
    print(list(zip(*n))) 
    print(zip(*n))
      
    '''
        name=['둘리','뽀로로','흰둥이']
    scores=[100,57,43]
    print(zip(name, scores))
    print(dict(zip(name,scores)))
    print(list(zip(name,scores)))
    
    n=zip(name,scores)
    print(n) 
    for i in n:
        print(i)

    n=zip(name,scores)
    print(list(zip(*n))) 
    print(zip(*n))
      
    
    '''
    name=['둘리','뽀로로','흰둥이']
    scores=[100,57,43]
    print(zip(name, scores))
    print(dict(zip(name,scores)))
    print(list(zip(name,scores)))
    
    n=zip(name,scores)
    print(n) 
    for i in n:
        print(i)

    n=zip(name,scores)
    print(list(zip(*n))) 
    #요소 리스트로 될돌려 돌려받는 방법
    n=zip(name,scores)
    m,s=zip(*n)#애는 튜플을 리스트로 묶어서 반환하고 각각으로 튜플을 반환함
    print(m,s)
    n=zip(name,scores)
    names2,scores2=[list(i) for i in zip(*n)] #튜플을 리스트로 캐스팅한다.
    print(names2,scores2)
    print(zip(*n))
      
      
     '''
     <zip object at 0x0000024ED1240A40>
{'둘리': 100, '뽀로로': 57, '흰둥이': 43}
[('둘리', 100), ('뽀로로', 57), ('흰둥이', 43)]
<zip object at 0x0000024ED1241900>
('둘리', 100)
('뽀로로', 57)
('흰둥이', 43)
[('둘리', '뽀로로', '흰둥이'), (100, 57, 43)]
('둘리', '뽀로로', '흰둥이') (100, 57, 43)
['둘리', '뽀로로', '흰둥이'] [100, 57, 43]
<zip object at 0x0000024ED1241AC0>

     '''

Q: 근데 

    n=zip(name,scores)
    m,s=zip(*n)#애는 튜플을 리스트로 묶어서 반환하고 각각으로 튜플을 반환함
    print(m,s)
    names2,scores2=[list(i) for i in zip(*n)] 

 

n을 이미 이용해서 이런 경우에는 names2, scores2가 받는 값이 없다. 

why?

교수님 말씀> zip은 쓰고나면 없앤다.

https://jaehaaheaj.tistory.com/entry/python-014

 

[python] zip() 함수에 대하여 - 2

2020/10/09 - [언어 공부 기록/python] - [python] unzip()함수는 없을까? 앞선 글에서 아래의 상황을 마주쳤다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 a = [1, 2, 3, 4] b = ['a', 'b', 'c', 'd', 'e'] c = ['foo', 'bar', 'baz'] y = zip(

jaehaaheaj.tistory.com

8번의 내용을 보면 zip에서 아이템을 이미 이용했다.

 

 

그렇다면 어떻게 zip오브젝트의 내용물을 이용하는 방법은 list화한 zip을 변수에 저장하는 것이다.

이 경우에는 재사용이 가능한다.

 

## 6.20 학생의 이름과 국어, 수학, 과학 성적이 하나의 튜플을 이룬다. 이렇게 튜플로 표시된 학생의 성적을 원소로 하는 튜플 scores가 아래와 같이 있다.
---
```
scores = ( ('박동규', 88, 95, 90), ('강영민', 85, 90, 95), ('박동민', 70, 90, 80), ('홍승주', 90, 90, 95))
```

### 1) 이러한 튜플을 zip() 함수를 사용하여 언패킹하여 수학 성적만 추출한 뒤에 수학 성적의 평균을 구하는 코드를 작성하라.
실행 결과


```
학생들의 수학 성적의 평균은 91.25입니다.
```
### 2) 이러한 튜플을 언패킹하여 수학, 과학 성적만 추출한 뒤에 수학과 과학 성적의 평균을 구하는 코드를 작성하라.
---
실행 결과


```
학생들의 수학과 과학 성적의 평균은 90.625입니다.
```


### 3) 이러한 튜플에 대하여 학생의 이름과 국어, 수학, 과학 성적의 평균 점수를 student_dic이라는 딕셔너리 구조에 넣은 후 다음과 같이 이름과 평균성적을 출력하여라.
---
실행 결과


```
이름         평균성적
---------------------
박동규        91.00
강영민        90.00
박동민        80.00
홍승주        91.67
```
def a():
    scores = ( ('박동규', 88, 95, 90), ('강영민', 85, 90, 95), ('박동민', 70, 90, 80), ('홍승주', 90, 90, 95))
    name,korea,math,science=zip(*scores)#zip안의 요소들이 각 변수에 담김
    print(name, korea, math, science)
    print(type(math))
    print(f'학생들의 수학 성적의 평균은 {sum(math)/len(math):.2f}입니다.')
    print(f'학생들의 수학과 과학 성적의 평균은 {(sum(math)+sum(science))/(len(math)+len(science)):.3f}입니다.')
    
    dic={}
    for i in scores:
        dic[i[0]]=sum(i[1:])/len(i[1:])
        print(dic)
    print(f'이름    평균성적\n ------------------')
    for i in dic:
        print(f'{i}\t {dic[i]:.2f}')

a()

 

'파이썬 -23여름학기(ㄱㅎㅈ)' 카테고리의 다른 글

2023 여름 파이썬 중간 족보  (0) 2023.07.09
7/7 파이썬 수업-클래스 복습, Gui, time  (0) 2023.07.07
23 파이썬 기말 족보  (0) 2023.07.06
22 파이썬 기말 족보  (0) 2023.07.06
7/6 수업 내용  (0) 2023.07.06