데이터과학 삼학년

[파이썬 기초] 파이썬 기초 및 자료형 소개 본문

Computer Science/Python & Web

[파이썬 기초] 파이썬 기초 및 자료형 소개

Dan-k 2020. 1. 12. 00:46
반응형

Computational thinking

> 문제를 정의하고 해답을 일반화 하는 과정 → 결국 알고리즘

- 컴퓨터의 개념과 구조를 이해하고, 사용자가 기능을 추가, 개선하여 컴퓨터가 목적에 맞게 work를 하도록 구성함

ex) 튜링 머신

 

Python이란

- 1989년 크리스마스, 귀도반 로섬이 심심해서 만든 언어

- python 활용성

> 데이터분석, 기계학습, 웹개발, 게임, GUI(Tkinter,Pyqt) 등

> 속도가 중요한 프로그램은 python으로 구현하기에 제한적

(: cython, jython 등 활용하면 극복가능할 것으로 보임)

- python 특징

> 인터프리터 : 한줄씩 읽어 내려가며 순차적 실행(대화형언어)

↔ 컴파일러(코드를 한번에 불러오고, compiler가 코드 최적화 후 실행)

> 동적 타이핑 : runtime에 type 검사 수행하는 것(Type을 따로 지정하지 않아도 됨)

↔ 정적 타이핑 : 변수의 타입을 모두 지정해줘야함(C, JAVA 등)

> 엄격한 문법 : 들여쓰기가 필요함(들여쓰기에 따라 전혀 다른 코드 구현됨)

> 높은 생산성 : pypi 등 라이브러리 구현이 잘되어 있음

 

[참고 자료]

 

자바 : javac라는 녀석이 class라는 jvm이 인식할 수 있는 바이너리 코드로 변환 후 컴퓨터 실행


변수

- 컴퓨터 메모리에 있는 값을 참조하기 위한 이름

- “=” : 할당, “==” : 같다

- type : string, integer, float

- 변수명으로 사용할 수 없는 경우

> 변수명이 숫자로 시작하는 것

> 예약어(reserved word)

ex) return, int, global 등

- 변수 선언하면 안되는 경우

> 내장 함수(built in function) 명과 동일하게 사용하면 안됨 : 내장함수가 제대로 동작하지 않음

ex) sum, max, dict 등

> 언더 스코어(_)로 시작하는 경우

> 던더 시작(__)로 시작하는 경우 : class내 던더 메서드 사용

> 한글(?)..되긴 하는데….

- 연산자

> //(몫), %(나머지), **(지수)

> (a = a+3) == (a +=3)

 

문자열

- 컴퓨터는 0과 1의 값만 인식가능하여 문자를 0,1로 변환

- 파이썬3 : 문자열 유니코드(UTF-8) 사용

- 파이썬2: ASCII(아스키) 코드 사용(영어권) - 0~127 번호가 있음(ex. 65 = ‘A’,97=’a’)

- 비영어권을 위한 문자체계 필요 -> 표준문자 체계 정립 -> Unicode 로 사용

- 간혹, 파일을 불러올때 문자가 깨지는 이유가 문자체계의 문제임(window는 unicode를 안씀)

- 여러줄에 걸친 문자열을 나타낼때 따옴표 세개 사용

ex. “””

ㅋㅋㅋ

ㅋㅋ

ㅋ“””

- 띄어쓰기 표현 \n 적용

- 연산 가능

> + : 문자열끼리 붙이기

> * : 반복해서 붙이기

- 인덱스 연산

> 문자열에서 [] 와 옵셋을 지정하여 추출 가능

ex. a = ‘방대환’; print(a[0]) → 방

> 슬라이싱 이용 가능

ex. a = ‘방대환’; print(a[:2]) → 방대

- 문자열 나누기(split) : split을 사용하면 list에 결과가 저장

> ex. a = ‘김치 피자 햄버거’; a_lst = a.split() → [‘김치’, ‘피자’, ‘햄버거’]

- 문자열 결합(join) -> 문자열로 결과가 저장

> “,”.join(a_lst) → ‘김치,피자,햄버거’

- 문자열 포맷(format)

> “요맨 %s” % ‘느’ → 요맨 느

> “요맨 {}”.format(‘느’) → 요맨 느

 

Sequence-list

- 시퀀스(sequence) : 순서가 있는 자료형(리스트, 튜플, 문자열)

- 리스트(list)

> 자료타입이 달라도 담을 수 있음

> 빈 리스트 생성 : list(), []

> 시퀀스 타입은 인덱스를 가짐(즉, 슬라이싱도 가능)

ex. var1 = [1,2,3,’가’,’나’,’다’]; print(var1[0:len(var1)] → 전체 출력

- 삽입

> append는 list의 맨 뒷 인덱스에 붙임

> 두개 리스트 붙임 + 연산자 사용 or extend 사용

ex. var1 = ["fast","campus"]

var2 = ["all_in_one","python"]

var1.extend(var2)

print(var1) → ["fast","campus","all_in_one","python"]

만약, var3 = var1.extend(var2) ; → var3는 none → append도 마찬가지, 함수에 return 값이 없기 때문

> 순서도 지정하여 삽입 가능

ex. a = ["fast","campus","all_in_one","python"]

a. insert(1,2)

print(a) → ['fast', 2, 'campus', 'all_in_one', 'python']

- 삭제

> 리스트 내 직접 값을 삭제 : remove(값)

> 리스트 내 인덱스를 지정하여 삭제 : del var1[1]

- 값, 길이세기 → (var1.count(값), len(var1) )

- 인덱스 찾기 → var1.index(값)

 

Sequence-tuple

- 리스트와 비슷하나, 변수로 선언(정의)하고 난 후, 수정과 삭제가 불가능함

> ex. col = (1,2) → col[1] = 3 → 실행 안됨

- a = 1,2,3,4 ; b = 1, → 튜플로 만들어짐

> 웬만하면 ( )로 묶어서 만들자

- a = ‘호호호호호’, → 튜플로 만들어짐….주의하자!

- 튜플을 쓰는 이유

> 순서가 있는 묶음으로 변수를 지정하고 사용할 때

> a,b = b,a → 변수 switch 가능

> 리스트보다 적은 메모리 사용 → 값이 바뀌지 않을 경우 튜플을 쓰는 것이 좋을 듯

> 정의후 값이 절대 변하지 않음

 

Dictionary

- key-value 형태로 갖는 자료형(해시, 해시맵), 순서가 없음

- {}, dict() 로 생성

ex.

lst = [[‘a’,’가’],[‘b’,’나’],[‘c’,’다’]] ; dict(lst) → dictionary 형성됨

a=['aa','bb','cc']

dict(a) → {'a': 'a', 'b': 'b', 'c': 'c'}

- 특징 : key 중복 불가능, 순서x, 항목 추가 변경 가능

- 키만 뽑아오기 .keys()

- 값만 뽑아오기 .values()

- 키, 값 뽑기 .items()

- 항목 삭제 del dic[‘키’]

- 모든 항복 삭제 .clear()

 

Set

- 생성 : set(), {‘a’,’b’,’c’} *주의 : {} → 딕셔너리생성…!

- 집합연산 가능

| 합집합

& 교집합

- 차집합

^ 대칭차집합

- 실습

1.list1 변수에 1~1-까지 요소 담은 리스트 선언

→ list1 = [i for i in range(1,11)]

2. dict1 에 1:1, 2:2, 11:11, 12:12 요소 담은 딕셔너리 선언

→ dict1 = {key:value for key, value in [(1,1),(2,2),(11,11),(12,12)]}

3. list1과 dict1의 키 값을 비교하여 list1에 없는 요소들만 출력

→ dict1.keys() - set(list1)

 

위 자료는 fastcampus python 강의 자료를 토대로 구성했음을 밝힙니다.
728x90
반응형
LIST
Comments