[패스트캠퍼스 데이터 분석 부트캠프] 3주차_파이썬Python 기초 문법 배우기- 자료형, 리스트, 튜플, 인덱싱

2024. 4. 8. 17:39패스트캠퍼스 BDA 13기

깜푸의 패스트캠퍼스 데이터분석 부트캠프 3주차 학습일지

렛츠 고

 

CH00. 프로그래밍의 이해

<진법>

: 0부터 n개의 숫자를 사용하여 수를 표현하는 방법

  • 2진법(0b) = 0과 1 두개의 숫자를 사용, 컴퓨터에 유용
  • 10진법 (0o)= 0 ~ 9까지의 10개의 숫자를 사용, 일상적으로 사용됨
  • 16진법 (0x or 0X)= 0 ~ 9 까지 10개의 숫자와 A ~ F 까지의 6개의 문자 사용

* 진법 변환

2진수 → 16진수 로 변환할 때, 2진수를 뒤에서부터 4자리씩 끊고, 끊은 부분을 16진수로 변환

 

(진법 계산 예시)

<ASCII 코드>

: 미국정보교환표준부호 American Standard Code for Information Interchange 의 약자

: 영문 알파벳을 사용하는 대표적인 문자 인코딩 방법

: 총 128개의 문자로 이루어진다

* 파이썬으로 ASCII 코드 출력하는 방법

문자에 해당하는 숫자 조회 → ord('문자')

숫자에 해당하는 문자 조회 → chr(숫자)

<파이썬이란>

  • 간결하고 읽기 쉬운 문법
  • 객체지향 및 함수형 프로그래밍 지원
  • 풍부한 라이브러리
  • 인터프리터 언어 : 코드를 컴파일하지않고 바로 실행할 수 있다

→ 컴파일러: 전체 소스 코드를 읽어들여 기계어/중간코드로 번역한 뒤, 실행 가능한 파일로 저장

ex) C, C++, Java 등

→ 인터프리터: 소스 코드를 한줄씩 읽어들여 즉기 실행하여 실시간으로 코드 수정이 가능하다

ex) Python, Javascript, Ruby 등

* 프로그램 작성 순서

(주어진 문제를 먼저 해석하고 방법을 고민해볼 것!!!)

  1. 문제 이해
  2. 변수 고민
  3. 구조 고민
  4. 코딩
  5. 검증

CH01. 기본적인 사용법

<출력 방법>

  1. 함수를 사용하지 않고 원하는 값을 프롬프트에 넣고 실행시키면 입력한 마지막 줄의 값이 실행
  2. print( )함수를 사용.

3. input( )함수를 사용. (추후 함수 부분에서 상세히 기술)

* 코드 셀에서 #을 입력하면 #오른쪽의 글들은 주석처리된다

* 긴 범위를 주석처리하고싶다면 ''' (범위) '''

<변수>

: 데이터를 저장하고 추후에 사용할 수 있게 해주는 저장공간

: 이름과 값으로 구성된다

: 변수의 이름은 참조할 때 사용되고, 변수의 값은 실제 데이터를 의미한다

: 같은 숫자들로 여러 연산을 하고싶을때 편리하다는 특징

: 변수 이름 = 저장할 값

: 헝가리식 표기법으로 변수 이름을 설정할 수 있다

ex) nNumber, StrName → 변수이름 앞에 n, str등 타입을 기입

 
 

***변수를 지정하더라도 이후에 새로운 값을 할당하여 값을 변경할 수 있음*** ***한줄에 여러개의 변수 값을 할당할 수 있고, 서로 다른 변수가 같은 값을 지정할 수도 있음***

: 변수를 삭제하고 싶다면, del 사용

: 변수의 이름 = 변경할 값 → 기존에 존재하던 변수가 새로운 값으로 바뀐

* copy() 함수

: b = a 라고 변수끼리 연결했을 때, a 리스트의 요소를 바꾸면 b 도 함께 변화한다.

이때 둘은 리스트의 객체가 같이 때문에 저장된 아이디 공간이 같아 연결되는 것.

따라서 b가 a의 값을 가져오지만 저장된 아이디 공간을 다르게 해주기 위해서 copy함수 사용가능

* 이름 규칙

: 영문자(대/소문자 구분), 숫자, 언더바( _ ) 의 조합으로 이름을 만들 수 있다

: 단, 숫자가 맨 앞에 올 수는 없다

: 공백은 들어갈 수 없음

ex)

a_1, A_1, _kkampu --- (ok)

1a, @kkampu, kkam pu --- (error)

* 변수의 종류 (as 자료형)

  • 숫자형
  • 문자형
  • 리스트 list, [ ]
  • 튜플 tuple, ( )
  • 딕셔너리 dict {key : value}
  • 집합 set { }

※시퀀스(연속적) : 리스트, 튜플, range함수, 문자열과 같이 값이 연속적으로 이어진 자료형을 시퀀스 자료형이라고 부름

※시퀀스 객체 : 시퀀스 자료형으로 만든 객체 요소

 

* 숫자형 데이터의 연산 종류

  1. 기본 사칙 연산 ( + - * / )
  2. 그 외 연산
 

3. 할당 연산

: 변수 x 에 이미 값이 부여되어있을때, 변수 x에 n을 더해서 x에 덮어씌우는 것

 

사칙 연산에 모두 적용 가능, 단 사칙연산 기호를 왼쪽에 등호를 오른쪽에 붙여줘야한다

* 문자열

: 문자 형태로 이루어진 자료형

: 큰 따옴표 " " 혹은 작은 따옴표 ' '로 감싸주면 문자열로 인식한다 (단, 한 문자열에 혼용하면 에러 발생)

: 문자열 안에 따옴표를 넣고 싶다면, 다음과 같은 방법으로 작성할 수 있다

" '(문자열)' " , ' " (문자열) " ' → 서로 다른 따옴표 사용하기

" \(문자열)\ " , ' \ (문자열) \ ' → \ 혹은 ₩ 기호로 문자열 감싸주기

: 여러 줄의 문자열을 하나의 변수에 넣으려면, 주석처리와 비슷하게 ''' 혹은 """ 로 여러 열을 감싸준다

혹은, 한 줄의 문자열 사이에 줄바꿈 기호 (\n)를 사용하여 여러줄로 출력할 수 있다

* 인덱싱

: 변수이름 뒤에 [ ]를 통해 인덱스를 설정할 수 있으며, 변수의 값에서 인덱스 번호에 해당하는 하나의 값을 추출할 수 있다

: 첫번째 위치는 0부터 시작. 맨 마지막 위치는 -1로도 표기할 수 있다

: 공백도 한 칸으로 인정됨

: 콜론( : )으로 슬라이싱을 할 수 있다 ex) 변수[ 시작인덱스 : 끝 인덱스 : 간격 ]

: 슬라이싱 간격을 작성하지않으면 1을 기본값으로 둠

: 시작 혹은 끝 인덱스를 공백으로 두면 각각 0번부터, -1까지로 간주한다


<print( )함수>

: 결과물을 출력하는 함수

: print(변수 or 출력하고 싶은 결과물/값)

: 여러 값을 한 줄에 출력할 수 있음

ex) [입력] print('a', 'b', 'd', 'e') → [출력] a b c d

print(변수1, 변수2, ... , ? )

? 부분에는 디폴트로 sep = ' ' 이 입력되어 여러 개의 변수가 띄어쓰기 없이 출력된다

만약, ? 부분에 sep = ' (원하는 구분기호) '를 입력하면 여러 개의 변수가 구분기호로 분리되어 출력됨

sep='\n' 은 줄 바꿈, sep='\t' 는 탭키 명령어

혹은 여러 줄로 작성된 print 결과값을 한줄로 출력하고 싶다면

print(변수1, ?)

print(변수2, ?)

? 부분에 end=' (원하는 구분기호) ' 를 입력하면 구분기호에 따라 여러 개의 변수가 한 줄에 출력된다

<문자열 함수>

  • len(a) : a라는 문자열 길이 출력
  • int(a) , float(a) : a라는 문자열을 각각 정수, 실수형으로 바꿔줌
  • a.upper() : a라는 문자열을 모두 대문자로 변환한 값 출력
  • a.lower() : a라는 문자열을 모두 소문자로 변환한 값 출력
  • a.lstrip() , a.rstrip() , a.strip() : a라는 문자열의 왼쪽, 오른쪽, 양쪽 공백을 제거하여 출력
  • x.count('b') : x라는 문자열에 b라는 문자열이 몇개 포함되어있는지 세어줌

→ b는 변수이름이 아니므로 따옴표를 사용해 문자열 표시

  • x.find('b') : x라는 문자열에 b라는 문자열이 몇번째 위치에서 처음 등장하는지 위치 인덱스 반환

→ 문자열이 없으면 -1을 반환 (FALSE와 같은 의미)

  • x.index('b') : find와 비슷하지만 x라는 문자열에 b 문자열이 없으면 오류 발생
  • " 구분기호 ".join('a') : a 문자열에 구분 기호를 사용해 각 문자마다 슬라이싱
  • x.split( ' 구분기호 ' ) : 구분 기호를 기준으로 x라는 문자열을 나누기
  • a.replace('x', 'y') : a변수 안의 x라는 문자열을 y로 변경
  • a.startswith('x') , a.endswith('x') : a변수안의 문자열이 x로 시작하는지 혹은 끝나는지
  • x = input('입력할 때 띄우고 싶은 말')

: x라는 변수에 넣고싶은 변수를 사용자가 직접 입력할 수 있고 화면에는 input 함수 안의 문자가 출력

: input으로 입력된 값은 기본적으로 str 타입이며 int( ) 등으로 감싸 데이터 타입을 변경할 수 있음

  • format(x) : 문자열 안에 x라는 값을 삽입

여러개의 변수를 삽입할 수 있음


<리스트 List>

: 요소들의 모음을 나타내는 자료형

: 요소들을 대괄호 [ ]로 감싸주어 만들 수 있다

: 모든 자료형을 리스트의 요소로 담을 수 있다

: 리스트에 인덱스를 적용하여 값을 불러올 수 있다

: 더하기와 곱하기 연산이 가능하다

+ : 리스트와 리스트를 순서대로 연결 * : 리스트를 숫자만큼 반복 출력

*** 서로 다른 자료형끼리는 연산할 수 없다***

: 리스트는 인덱싱을 통해 값 수정/삭제 가능

 

***단, 범주를 인덱싱하고 하나의 요소만으로 바꿀 수는 없음***

<리스트 함수>

  • len()
  • sum(), min(), max() : 리스트 요소들의 합, 최소값, 최대값을 구함

(단, 리스트의 요소가 숫자가 아니라면 에러 발생)

  • in, not in : 특정 요소가 리스트 안에 있는지 확인
  • append(), extend() : 리스트의 맨 마지막에 append는 요소를 추가, extend는 다른 리스트를 추가
  • insert() : 리스트의 특정 위치에 특정 요소를 삽입 ex) ls.insert(인덱스번호, 삽입할 값)
  • remove(), pop() : 리스트의 요소를 삭제

(remove는 특정 요소를 제거, pop은 특정 위치의 요소를 제거하여 그 요소를 반환)

  • count() : 리스트의 특정 요소의 개수 반환
  • index() : 리스트에 요소가 있는 경우 인덱스 값을 반환

cf) 리스트의 인덱스번호로 요소를 출력하는 것과 요소의 인덱스값을 반환하는 것은 차이가 있다

a[1] = 'b' → 리스트a의 인덱스 번호 1번에 해당하는 값인 'b'가 반환

a.index(1) = 2 → 리스트a에 1이 있다면 1의 인덱스 위치 번호를 반환

  • sort, sorted : 리스트 정렬

(sort는 리스트를 정렬된 리스트로 바꾸지만, sorted는 정렬한 값을 보여줄 뿐 리스트 자체의 배열을 바꾸지않음)

  • join : 리스트의 요소들을 하나의 문자열로 합침 ex)'문자열'.join(리스트)
  • split()

<range 함수>

: range(시작, 끝, 간격) → 시작부터 끝-1 범위의 값을 간격에 따라 출력해주는 함수

ex) range(10) = range(0, 10)

list(range(10)) = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list(range(1, 10, 2)) = [1, 3, 5, 7, 9] → 1~10까지 범위안에 있는 홀수 리스트를 만들어줄 수 있다

llist(range(10, 0, -1)) = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

: range 자체로는 연산자 사용 불가능하므로 리스트나 튜플로 변경하여 사용한다


<튜플 tuple>

: 여러 요소들을 묶어 한 그룹으로 만들 수 있다

: 그러나 튜플은 읽기 전용이기 때문에 튜플의 요소는 수정이나 삭제가 불가능 (리스트는 수정/삭제 가능)

→프로그램 실행 중 변하지 않거나 고정해야하는 값을 튜플로 저장하는 것이 편리

: 요소들을 괄호 ( ) 로 감싸주면 튜플이 된다

: a = 1, 2, 3, 4, 5 와 같은 형식으로 작성하더라도 print(a) = (1, 2, 3, 4, 5) 튜플 형태로 저장

 

: 인덱싱을 적용해 값을 찾아볼 수 있다

 

: 더하기 곱하기 연산이 가능 (단, 다른 자료형과 더하기는 불가능)

 

***튜플끼리는 더할 수 있다***

: sort()는 사용할 수 없지만 sorted()는 튜플을 리스트로 변환하여 요소를 정렬해서 반환해준다

<튜플 함수>

  • len()
  • sum(), min(), max()
  • in, not in
  • count()
  • index()
  • join()

***그러나 insert, pop 등 튜플 자체를 변경하는 함수는 사용할 수 없다***

  • max( 튜플 이름, key = lambda x:x[인덱스] ) or min( 튜플 이름, key = lambda x:x[인덱스] )

: 다중 튜플의 경우 정렬 기준을 정의하여 튜플 내 최대/최소값을 탐색


<딕셔너리 dictionary>

: {키 key : 값 value} 의 쌍이 모여있는 사전 형태의 자료형

: 중괄호 { } 로 감싸주어 표현

: 키는 중복될 수 없고, 리스트는 키가 될 수 없음 (값은 리스트 가능)

: 위치가 없기 때문에 인덱싱 불가능

: 딕셔너리 키로 값을 찾을 수 있다

: 인덱스를 사용하고 싶다면 딕셔너리를 리스트로 감싸 리스트로 형식을 변경해준뒤 인덱싱 가능

: dic_a[key_name] = 추가할 값 → dic_a에 키와 값을 추가할 수 있다

del dic_a[key_name] → dic_a에 키를 삭제하여 딕셔너리를 수정할 수 있다

<딕셔너리 함수>

  • keys() : 키들을 반환
  • values() : 값들을 반환
  • items() : 키와 값의 튜플 쌍들을 반환
  • get(key_name) : 원하는 키 값에 대응되는 값을 반환 (dic[key_name]과 같은 값을 반환)
  • update() : 딕셔너리에 새로운 딕셔너리를 추가하여 하나의 딕셔너리를 만들어준다

*but 딕셔너리에 없는 키 하나를 추가할 경우, 딕셔너리명[추가할 키] = 추가할 값을 입력하면 된다

  • zip : 튜플/리스트 두개를 하나의 딕셔너리로 변환

*딕셔너리 만드는 방법 4가지 정리

1. 중괄호 사용 2. zip 리스트 대응시키기 3. 튜플로 키:값을 묶어 리스트로 대응시키기 4.dict로 한번에 키:값 대응시키기


<집합>

: 순서가 없고 중복이 없는 자료형

: 요소들을 중괄호 { } 로 감싸주어 표현

: 문자열, 숫자, 리스트, 튜플을 요소로 가질 수 있음

: 순서가 없기때문에 인덱싱 X

<집합 함수>

  • & , intersection : 교집합
  • - , difference : 차집합
  • | , union : 합집합
  • add(), remove() : 요소를 추가 / 삭제


<불리언 boolean>

: 참 또는 거짓을 나타내는 자료형

: True or False로 나타내야한다

: 논리 연산자와 함께 사용

 
 

* 단락평가

: 위와 같이 and/or 연산자로 연결되어있을 때, True 혹은 False가 결정되는 쪽에서 단락평가가 일어난다

ex) True and 'Python'

→ 첫번째 값은 True 이고 and로 연결되어 있으므로 두번째 값인 'Pyhton'에서 단력평가가 일어나므로 두번째 값 반환

ex) False or 'Python'

→ 첫번째 값이 False이고 or로 연결되어있어 하나라도 False이면 False를 반환하니까 첫번재 값 T/F 결정

ex) 0 or False

→ 첫번째 값이 True이므로 두번째 값에서 단락 평가가 일어난다