이번에는 Chapter 6 부터 Chapter 8 까지 스터디를 진행 하였다.
http://www.yes24.com/Product/Goods/29289816

 

처음 시작하는 파이썬 - YES24

파이썬으로 프로그래밍에 입문하자!데이터 분석, 금융, 자연 과학 등 다양한 분야에서 각광받는 언어 파이썬. 개발자가 아니더라도 개발자가 되고 싶다면, 개발자지만 파이썬을 처음 시작한다

www.yes24.com

책의 구매 링크이다.
저번 주차 스터티 보고서링크는 다음과 같다.
https://inha-kim.tistory.com/33

 

[처음 시작하는 파이썬] 1주차 스터디 정리 [파이(py) 맛보기],[ 데이터: 타입, 값, 변수, 이름],[숫

WEBS 동아리 스터디로 다음과 같이 처음 시작하는 파이썬으로 제대로된 파이썬 공부를 시작 하였다. http://www.yes24.com/Product/Goods/29289816 처음 시작하는 파이썬 - YES24 파이썬으로 프로그래밍에 입문

inha-kim.tistory.com

[chapter 6] 반복문: while과  for문


코드를 한번 이상 실행 하는 것은 while과 for문이 필요하다.
아주 간단한 while문은 다음과 같다.

간단한 while문 이다.

count가 1 이였다가, print 한 뒤에 +1이 되는 것을 알 수 있다.
while문은 반복적인 조건문 이므로 count가 11이 되는 순간 멈추게 된다.


저러한 조건 말고, 무한루프중에 멈추는 방법은 break가 있다.

다음과 같이 가능하다.

이 프로그램은 q를 입력하면 종료하게 되며, 아니면 모두 대문자로 변환 된 것이 출력된다.

continue는 break와 반대 같지만, 이것은 반복문을 중단 하지 않고, 아래의 코드를 모두 뛰어넘는 것이다.
다음과 같이 사용이 가능하다.

예제

c로 시작하는 단어가 입력시에는 continue이 되는 것을 알 수 있다.

continue 아래 코드는 모두 무시, while문이 다시 시작된다.


break문이 어떤것을 확인 하면 종료 하지만, 모두 체크하고도 break가 되지 않을 경우 다음과 같이 else: 를 통해서 출력이 가능하다.

다음과 같이 else를 이용하면 while 문이 break에 안걸리면 출력된다.

 

파이썬의 이터레이터는 매우 유용하게 사용된다.
자료구조가 엄청 커도 , 어떻게 구현되든 무조건 자료구조를 순회하게 해준다.
for과 in을 사용하면 된다.

오른쪽이 더 파이썬 같은 방식이다. 간결하고, 보기좋다.

break와 continue은 동일하게 작동한다. 

thxxu 에서 u는 break, x는 continue한다.

else: 를 이용하면 break가 호출이 되지 않으면 else안에 있는 것들이 실행된다.

u가 없으므로 다음과 같이 호출된다.

 

숫자 시퀀스를 생성하는 range는 다음과 같이 사용하다.

range(start,end,steps), start는 생략시 0부터, stop은 항상 입력하며 stop-1 까지, step는 생략시 1, 아닐시에는 설정이가능하다. return 은 반복이 가능한 이터레이터 이다.

 0 ~ 9 까지 출력된다. 그 다음은 0,10, steps 2이므로 0,2,4,6,8 이 출력 된다.
start 2, end -1, steps이 -1 이므로 2 1 0 이 된다.

return을 range 인 것을 알 수 있다.
list 로도 만들 수 있다.

list를 만들기도 쉬워진다.

[chapter 7] 튜플과 리스트

 

python에는 두가지 다른 시퀀스 구조가 있다.

하나는 튜플 하나는 리스트, 튜플은 불변 이며, 리스트는 가변이다.

튜플 생성에는 다양한 방법이 있다.

빈 튜플은 다음과 같이 생성한다.
다음과 같은 방법들이 있으며,  ","를 있지 말자. 안쓰면 string

요소가 두개 이상 이면 마지막에 , 는 써도 상관 없고, 안써도 상관없다. 매우 관대한 언어이다.

모두 튜플이다.

다음을 보고 잘 알아두자. type이 했갈릴때가 있을 수도 있다.

두번째는 string이다

tuple은 여러 변수에 한번에 할당이 가능하다.
이것을 튜플 언팩킹(tuple unpacking)이라고 부르며, 다음과 같은 예제들이 있다.

다음과 같이 사용이 가능하다,두 변수를 교체할때도 유용하게 쓰인다.

 

tuple()을 사용하면 튜플을 만들 수 있으며, + 로 튜플을 결합 할 수 있다.

다음과 같은 예제가 가능하다.

*는 복제하는 것이다.

복제하여 원소가 3개가 되었으며, 클래스는 tuple이다.

순회는 다른 이터레이터 똑같이 작동한다.

간단하게 작동 하는 것을 알 수 있다.

튜플은 불변객체이므로 수정이 불가능하다.
수정하는 것 처럼 보이지는 주소가 바뀌는 것 을 알 수 있다.

tuple1 += tuple2는 주소가 바뀐다.

 

리스트는 데이터를 순차적으로 파악하는데 유용하며, 문자열과 달리 리스트는 변경이 가능하다.
현재 위치에 추가, 삭제하거나 기존 요소를 덮어쓰기, 등이 가능하며, 여러값이 여러번나오기도 가능하다.

리스트를 생성하는 법은 []이다. 이다. 생성하는 것은 list()함수를 이용한다.

다양한 방식으로 list가 사용이 가능하다. 

list 생성은 다음과 같이 가능하다.

list함수 이며, 문자열, 튜플 등 다양한 것에서 가능하다

split 메서드는 앞에서 문자열을 split하는 것이다.
string 에다가 사용하면 list가 나오는 것을 알 수 있다.

다음과 같이 다양한 방식으로 리스트를 만들 수 있다. 

offset으로 string과 동일하게 특정 값을 추출 할 수 있다.

하는 방식은 다음과 string과 동일하다.

0은 0, 10은 10, -1은 10, -10은 1 인것을 알 수 있다.

리스트 또한 슬라이스로 얻을 수 있다.

스트링과 동일하게 [start:end:step] 형식이다.

다음과 같이 숫자를 출력 할 수 있다.

동일하게 이 경우 error는 발생 하지 않는다.

에러는 생기지 않는다. 단지 scan 일 뿐이다.

리스트를 반대로 뒤집는 것은 reverse 메서드 이다. 이 메서드는 리턴이 없다.

첫 출력은 None 그 다음은 숫자이다.

리스트 맨 끝에 항목을 더하는 것은 append를 사용한다.
insert는 index, 값을 전달 받으면 그 위치에 삽입한다.리스트 끝을 넘는 인덱스를 주면 자동으로 맨 뒤에 더한다.

너무 편한언어^^

6을 넣고 , 3번째 인덱스에 3을, 1000번째에 7을 넣는다.

*를 이용하여 항목을 복제 할 수 있다.

[1] 이 3개로 복사된다.

리스트의 병합은 extend()와 + 또는 +=이용하면 된다.

append는 리스트 자체가 그 앞에 리스트의 원소로 들어간다. 예를 확인하자.

extend로 확장 한 것이다.
+= 로 더한 것이다.
append로 하면 A_class의 마지막에 B_class가 통째로 삽입된다.

offset으로 리스트의 값을 바꿀 수 있다, 또한 슬라이스를 이용하여 바꿀 수도 있다.
슬라이스 항목수와 달라도, 아무것도 없어도 상관없다.

다음과 같이 변경이 가능하다.

심지어 list가 아니라 튜플이 와도 상관없다.
심지어 문자열까지 된다.

파이썬이 매우매우 자비로운 언어인 것을 알 수 있다.

오프셋으로 항목을 삭제하는 것은 del 을 이용하면 된다.
삭제 된 곳 뒤가 앞당겨져서 온다.

삭제의 예 이다.

값으로 항목을 삭제 하는 것은  remove() 메서드를 사용하면 된다.

이것은 같은 값이 중복 되면 맨 앞에 있는 것을 삭제한다.

remove로 맨 처음 1이 삭제가 되는 것을 알 수 있다.

offset은 pop으로 항목을 삭제하며, return값으로 그 값을 가져온다.
pop()에 아무것도 안넘기면 -1, 맨 뒤이며, 값을 주면 offset값을 지운다.

number에서 pop하면 맨뒤, pop(2)는 두번째

파이썬 3.3이상에서는 모든 항목을 지우는 clear() 메서드가 새로 생겼다.

모두 지워지는 것을 알 수 있다.

값으로 인덱스를 찾을 수도 있다.

이때 나오는 인덱스는 제일 먼저 나온 것 이다.

제일 먼저 나오는 것의 인덱스를 출력

존재 여부 확인은 in을 사용한다,
return 은 true or false 이다.

다음과 같이 존재 여부를 in으로 확인가능하다.

값을 세는 것은 count()를 이용한다.

3, 0 이 return 된다.

join은 문자열로 변환하는 것이다.
이걸로 form이 있는 문자열로 합칠 수 있다.

이터레이터 들이 join 사용 가능하다

정렬하는 sort와 sorted가 있다.
두개의 차이는 sort는 리스트 자체를 내부적으로 sort하지만,
sorted는 복사본을 return 한다.

sort는 메서드로 return 이 없다, 내부적으로 sort, sorted는 함수로 원본 list는 영향이 없다.

항목의 개수를 얻는 것은 len 함수이다.
다른 타입에도 사용이 가능하다.

원소의 개수 9 return

= 할당하기는 가변성질을 가지고 있는 list이므로 주의 해야한다.
다음과 같은 예제를 확인하자.

b = a 이렇게 하여도, 메모리 주소가 같아 하나만 바꿔도 값이 바뀌는 것을 알 수 있다.

그러면 어떻게 복사할까.

세가지 방법이 있다.

copy 메서드, list 변환 함수, 슬라이스 [:] 등을 사용 하는 것이다.

다음과 같이 하면 복사가 가능하다. id가 다른 것을 알 수 있다.

깊은복사 deepcopy()
리스트의 값이 모두 불변이면 copy() 가 잘 작동한다.
하지만 하나라도 가변이 있으면 원하는대로 작동이 안할 수 있다.
이 예를 확인해보자.

복사가 잘 된것처럼 보인다.

복사가 잘 된것 같지만 아니다.
리스트 안에 불변 객체는 문제가 안된다 하지만 리스트 안에 리스트 즉 가변객체가 있으면 다음과 같은

의도하지 못한 상황이 발생한다.

이런 상황이 발생한다.

위에 있는 것들은 얕은 복사 이기 때문이다. deepcopy를 사용하자.
이를 사용 하는 방법은 copy 를 import 해주자.

deepcopy는 중첩된 리스트, 딕셔너리, 기타 다른 객체들은 모두 복사한다.

정상적으로 복사가 되는 것을 알 수 있다.

리스트는 비교가 가능하다. 

이는 매우 유용하다.

같은 offset의 항목을 비교한다.

다음과 같이 비교 연산을 사용 가능

for 과 in을 사용 할 수 있다.

break가 호출이 안되면 thank u, break가 되면 else가 출력 안된다.

list에 아무 것도 없으면 else가 실행된다.

바로 thank u 가 실행

여러 시퀀스를 순회하는 것은 zip을 이용 하면 된다.

시퀀스의 길이가 다르면 다음과 같이 제일 짧은게 끝나면 멈춘다.

간단한 zip 사용법

 다음과 같이 list로 만들 수 있다.

리스트 안에 튜플이 있는 형식 이다.

dict()로 딕셔너리도 만들 수 있다.

다음 장에 자세한 내용을 배운다.

list comprehension, 리스트 컴프리헨션은 한줄로 리스트를 만들 수 있다.
잘만쓰면 매우 편하다.
파이써닉한 방식이다. [ 표현식 for 항목 in 순회 가능한 객체 ]
다양한 예를 참고하자.

이렇게 간단하게 숫자를 넣을 수 있다.

이러한 방식도 있다.

다음과 같은 방식도 가능하다.

여기다가 조건을 줄수도 있다.
[ 표현식 for 항목 in 순회 가능한 객체 if 조건]
홀수, 짝수 예를 들어보자.

다양한 곳에서 활용이 가능하다.

다음과 같은 경우도 가능하다.
for in 을 두번 쓰는 것이다.
for in ( for in) 이런 구조라고 생각하면 편하다.

이중포문을 생각하면 편하다.

튜플 언팩킹으로 다음과 같이도 가능하다.

튜플 언팩킹

리스트안에 리스트도 넣을 수 있다.

다음 예를 보자.

오프셋으로 출력을 해보면 다음과 같다.

리스트 안에 리스트가 있다. 

리스트와 튜플의 차이는 뭘까?

튜플은 리스트의 append(), insert()가 없다. 그러면 튜플이 있는 이유는?

- 튜플은 더 적은 공간을 사용

- 실수로 튜플의 항목이 손상될 염려가 있다.

- 튜플은 딕셔너리 키로 사용 가능

- 네임드튜플(10.11) 객체의 단순 대안이 된다.

 

가변타입은 컴프리헨션이 있지만, 튜플은 없다.

작동은 가능하지만 이것은 제네레이터 컴프리센션이다. 제네레이터 객체를 반환한다.

9.8절에 배운다.

 

[chapter 8] 딕셔너리와 셋

딕셔너리는 리스트와 비슷하지만, 순서를 따지지 않는다.

그러므로 0또는 1과 같은 offset 으로 항목을 선택 할 수 없다.

대신 고유한 key와 value를 사용한다.
배열이나 리스트와 다르게 딕셔너리는 매우 좋다,

 

딕셔너리는 {} 와 dict()를 이용 하여 만들 수 있다.

다음과 같은 예제를 확인하자.

정상적으로 딕셔너리가 생성 된 것을 알 수 있다.
dict로 다음과 같이 딕셔너리로 만들 수 있다.

이렇게 예약어, keyword를 사용하면 error가 발생한다.

keyword는 쓰지 못한다.

또한 dict는 변환이 가능하다.

물론 두 값으로 이뤄지는 시퀀스만 가능하다.

리스트를 dict로 변환.
list 안에 tuple 형태도 가능하다.
튜플안에 리스트도 가능하다.
튜플안에 튜플도 가능핟,

다음과 같은 형태도 가능하다 매우 관대한 파이썬..

리스트와 튜플이 다음과 같이 가능하다.

 

항목을 추가 및 변경은 다음과 같이 한다.

[key]를 사용한다. 다음과 같은 예제를 확인하다.

다음과 같은 것을 딕셔너리가 존재한다.

여기서 value 변경은 다음과 같이 한다.

다음과 같이 value를 바꿀 수 있다.

새로운 것은 어떻게 추가하나? 다음과 같이 하면 된다.

딕셔너리에 없는 것을 추가한다.

여기서 만약 키 값이 동일하면 마지막에 들어 온 것으로 대체된다.

키값은 항상 고유해야한다.

기존에 있던 'one' : 10 이 대체 된 것을 알 수 있다.


딕셔너리에서 항목을 얻는 것은 [key] 아니면 get()을 이용한다.

[key]는 없으면 error가 발생한다.

이 경우 key에 해당하는 값이 dict에 있다.
이 경우 error 가 발생한다.

이러한 것을 방지 하기 위해 get를 이용하면 된다.

다음과 같이 있는 것을 하면 value가, 아닐 시에는 None이 출력 된다.

이때 옵션 값을 주어, none이 출력이 아니라 다음과 같이도 가능하다.

없으므로 not found가 출력 된다.

모든 key를 얻는 것은 keys()를 사용하면 된다.
모든 value를 얻는 것은 values()를 쓰면 된다.
list와 같이 쓰면 반복가능한 이터레이터로 만들 수 있다.

keys와 values 사용법이다.

 

여기서 모든 key와 value를 얻는 것은 items를 사용한다.
len은 키-값 쌍의 개수를 가져온다.

모두 가져오며, 키와 값은 튜플형태이다. 길이는 4 이다.

결합하기는 다음과 같이 가능하다.

파이썬 3.5 이상부터 **를 지원한다.

하지만 이건 얕은 복사이다. 세개이상도 지원한다 , 그냥 뒤에 추가로 써주면 된다.

다음과 같이 결합이 가능하다.

결합하기는 update()로도 가능하다.
이것은 한 딕셔너리의 키와 값을 복사하여 다른 것에 붙이는 것 이다.
같은 key 가 있으면 마지막에 들어온 key값으로 대체된다.

업데이트로 더해지는 것을 알 수 있으며 'one'의 key가 겹치므로 value가 10으로 바뀐다.

키와 del로 항목 삭제가 가능하다.

없는 것을 지우면 error가 뜬다.

키로 항목 가져온 뒤에 제삭제하는 것은 pop이다

이 또한 없는 것을 지우면 error가 발생한다.

모든 항목을 삭제 하는 방법은 clear()를 사용한다.

다음과 같이 작동한다.

딕셔너리에서도 in 이 가능하다.
이것은 key 값을 체크한다.

다음과 같이 true false를 체크가 가능하다.

할당하기는 = 는 리스트와 마찬가지로 참조하는 것 이므로, = 로 할 시에 하나가 변경시 모두가 변경된다.

다음과 같이 모두 변경된다.

copy를 사용하면 어느정도 문제를 해결 할 수 있다.

어느정도 해결이 가능하다.

하지만 위에서 설명 한 것처럼 list같은 가변 객체가 들어가 있으면 다음과 같은 문제가 발생한다.

number1만 변경 하는데 모두 변경된다.

이럴때는 deepcopy를 사용한다. 위에서도 했다.

import copy

문제가 해결 된 것을 알 수 있었다.

딕셔너리 비교는 == != 만 가능하다.

딕셔너리는 순서를 별로 중요하지않게 생각하는 것을 잊지말자.

순서는 중요하지 않다.

순회는 for과 in으로 한다.
다음과 같은 것으로 key value item을 출력 할 수 있다.

간단하게 할 수 있다.

 

딕셔너리도 컴프리헨션이 가능하다.
많이 본 형태이다 {키_표현식: 값_표현식 for 표현식 in 순회가능한 객체}

letter이 key, count가 value이다.
set로 하면 더욱더 보기 좋다.

다중 for문도 가능하며, if도 가능하다.

{키_표현식: 값_표현식 for 표현식 in 순회가능한 객체 if test}

다음과 같이 가능하다.

셋은 간단하게 생각하면 키만 남은 딕셔너리라고 생각하면된다.
집합, 정규교욱과정만 배웠으면 모두 아는 내용 이다.

 

set()은 생성과 변환이 가능하다.
{ } 과 set이라는 것 이다.

set사용법

empty_set의 출력은 set()이다.
그 이유는 {}는 딕셔너리이기 때문이다.

string list tuple set

중복은 제거한다. 집합의 성질이기 때문이다. 순서또한 중요 하지 않다.

그리고 딕셔너리의 경우 key값만 취하는 것을 알 수 있다.

여기서도 동일하게 len으로 길이를 구할 수 있다.

len으로 길이를 구할 수 있다.

항목을 추가 하는 것은 add()를 활용한다, 삭제는 remove이다.

add로 5가 들어오고, 삭제로 1이 나간다.

for과 in으로 순회, 멤버십 테스트로 in을 사용 할 수 있다.

for과 in으로 순회하여 숫자를 출력, in으로 존재여부를 확인가능

책의  나온 예제 중 하나이다.
딕셔너리 안에 key, value 로 set이 들어 간 형태이다.

술의 종류인가보다

여기서 vodka가 포함된 음료는?

다음과 같이 가능하다.

그러면 좀더 복잡한 예제로 보드카(vodka)가 섞인 음료 이며, cream과 vermouth를 안먹는 다고 한다.

뭐 다양한 방식으로 해도 상관없다,

셋은 집합이다. 집합에는 교집합 , 합집합 이런 것을 생각 할 수 있다.
그러면 위의 예제에서 셋 교집합 연산인 &를 사용해보자.
나는 vermouth or orange juice가 들어간게 먹고싶다고 하면다음과 같이 하면 된다.
이것은 있으면 true이다. 없으면 false

다음과 같이 잘 동작한다.

왜그럴까 저거의 retrun값을 확인 해보자.

다음과 같이 교집합이 없으면 set() false이고 있으면 하나라도 들어있는 set이 나온다.

앞에서 했던것을 해보자, vodka는 있고, cream과 vermouth는 안먹는다고 생각 해보자.

다음과 같이 파이썬답게 할 수 있다.

이제 뭐 간단하게 알아보자. 교집합은 & 와 intersection이 있다.

다음과 같이 가능하다.

그러면 합집합은 뭘까 |와  union이다.

합집합이다.

그러면 차집합도 있을까? - 아니면 difference()를 사용하면 된다.

간단하다.

이외에도 ^ symmetric_difference 가 있다.
대칭차집합으로, 한 set에는 포함이지만 두개의 set에 포함되지 않는 항목을 구하는 것 이다.

대칭차집합

부분집합인지 체크 하는 것은 <= 연산이나 issubset을 쓰면 된다.

간단하게 가능하다.

자기자신은 자기의 부분집합이다 까먹지말자.

진부분집합, 두번째 셋이 a말고도 원소가 더 있어야한다.이것은 < 를 이용한다.

다음과 같이 체크가 가능하다.

상위집합은 부분집합의 반대이다.
>= 이나 issuperset을 사용하면 된다.
>는 진 상위집합이다.
예를보면 다음과 같다.

그냥 간단하게 괄호방향으로 판단하자.

 

set의 comprehension 컴프리헨션은 쉽다. list 딕셔너리와 동일하다.

{표현식 for 표현식 in 순회가능한 객체}

{표현식 for 표현식 in 순회가능한 객체 if 테스트}

간단한 예를 보자.

홀수 짝수 대표적인 예 이다.

불변하는 set 이름 그대로 frozenset을 이용하면 된다.

다음과 같다. 한번 넣어볼까?
넣을려면 error가 발생한다.

여기서 배운 자료구조는 [] 리스트, () 튜플, {} 딕셔너리와 셋이 있다.
셋을제외하고는 모두 [ ]를 이용하여 접근한다. 예를 보자.

다음과 같이 가능하다, list tuple은 인덱스, dict는 key로 접근
셋은 error가 발생한다.

자료구조는 다양하게 결합이 가능하다.
다음과 같이 list를 확인하자.

다음과 같이 가능하다.

이러한 자료구조 결합은 제한사항이 매우 많다.

타입이 문제이다.
예를들어 딕셔너리의 키는 불변하다. 이는 리스트 딕셔너리 셋은 키가 될 수 없다는 것이다.
하지만 튜플은 불변이므로 딕셔너리의 키가 가능하다.

뭐 다양한 경우가 가능하다.

 

연습문제 솔루션은 깃허브에 올린다.

https://github.com/kimhyeonwokk/introducing_python_solution

 

GitHub - kimhyeonwokk/introducing_python_solution: Practice Solution in Introducing Python Books

Practice Solution in Introducing Python Books. Contribute to kimhyeonwokk/introducing_python_solution development by creating an account on GitHub.

github.com

 

+ Recent posts