데이터 과학을 위한 파이썬 프로그래밍 교재를 사용하여 작성한 강의자료입니다.
자료형
메모리
- 메모리는 많은 방들로 이루어져 있으며 각 방마다 하나의 자료를 저장
변수
- 메모리 방마다 부여한 이름
- 어떠한 값을 저장하는 장소
변수에 데이터 저장
-
- 데이터를 저장하기 위해 할당 연산자 (=) 사용
- 할당 연산자 ‘=’는 오른쪽의 것을 왼쪽의 변수에 대입하라는 뜻
- 대입 연산자의 왼쪽에는 무조건 변수만 올 수 있음
- 대입 연산자의 오른쪽에는 무엇이든(값, 변수, 수식, 함수 등) 올 수 있음
저장된 데이터를 출력하기 위해 print(변수명)을 입력>>> major = "Data Sience" >>> print(major) Data sience
“major 라는 공간에 Data Sience 라는 글자를 넣어라.”로 해석
변수와 값
>>> a = 5
>>> b = 10
>>> print(a+b)
15
>>> a = 5
>>> b = 10
>>> print("a+b")
a+b
- 따옴표의 사용 여부에 따른 의미 차이
코드 의미
print(a+b) | a 변수에 있는 값과 b변수에 있는 값을 더해 화면에 출력하라 |
print(”a+b”) | “a+b”라는 문자를 그대로 화면에 출력하라 |
변수의 특징
- 변수에 저장된 데이터는 언제든지 바뀔 수 있고 새로운 데이터가 저장되면 과거의 데이터는 사라짐
- 할당 연산자 ’=’를 이용해서 새로운 데이터 저장
>>> myAlphabet = 'A'
>>> print(myAlphabet)
A
>>> myAlphabet = 'ABC' #새로운 데이터
>>> print(myAlphabet)
ABC
변수명 규칙
1 | - 변수의 이름은 문자, 숫자, Underscore(_)로만 이루어짐 - 다른 기호를 사용하면 구문 에러(Syntax Error) |
2 | - 변수명은 문자 또는 Underscore로만 시작해야 함 - 즉, 숫자로 시작하면 안됨 |
3 | - 파이썬에서는 대문자와 소문자를 구분 |
4 | - 파이썬 예약어 (KeyWord, Reserved word)들은 변수명으로 사용 불가 |
파이썬 예약어 ( 변수의 이름으로 올 수 없다.)
>>> import keyword
>>> print(keyword.kwlist)
['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class',
'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from',
'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass',
'raise', 'return', 'try', 'while', 'with', 'yield']
[참고]
import
- ‘수입하다’, ‘가져오다’의 뜻으로 다른 프로그램에서 데이터를 갖고오는것을 의미한다. import 를 사용하여 모듈을 가져올 수 있다.
자료형이란?
- 자료의 형식
- 자료 : 어떤 물체나 현상을 측정하거나 관찰하여 얻어진 값
- 자료의 특성 : 정확한 자료
- 필요할 때 언제든지 수정 가능
사용 목적에 따라 다른 형태로 가공 가능
💡 자료형은 자료를 기능과 역할에 따라 구분한 것으로 데이터 타입을 의미
변수가 어떤 형태의 데이터를 저장하는가
- 숫자 : 물건의 가격, 학생의 성적
- 문자열 : 메일 제목, 메시지 내용
- 불 : 로그인 상태
자료형 확인 방법
- type() 함수를 사용해 데이터 타입 확인 가능
자료형
- 숫자데이터 : 정수형, 실수형
- 정수형 : 자연수를 포함해 0,1,2,-1,-2와 같이 값의 영역이 정수로 한정된 값
- data=1과 같은 방식으로 선언 파이썬의 인터프리터가 알아서 메모리 영역에 필요한 공간을 확보 양의 정수와 음의 정수, 숫자 0를 포함한다. interger(정수)의 int로 나타냄
>>> a = 123 >>> a = -178 >>> a = 0
- 실수형 : 부동소수점으로 10.2, 7.2와 같이 소수점이 포함된 값
- 값이 정수형이라도 부동소수점은 인터프리터는 실수형으로 해석 floating(실수)의 float로 나타냄
부동소수점 : 컴퓨터에서 실수를 표시하는 방법으로 유효숫자와 소수점의 위치를 사용해 실수를 표현>>> a = 1.2 >>> a = -3.45
- 소수점 16번째 자리까지만 나타남
- 데이터 타입
>>> a=3 >>> type(a) <class 'int'> >>> b=3.5 >>> type(b) <class 'float'>
>>> num=3.1234567890123456789012345678901234567890 >>> print(num) 3.1234567890123457
문자데이터 : 문자형
- 값이문자로 출력되는 자료형으로 따옴표에 들어간 정보
a=5
b=10
>>> print(a+b)
15
>>> print("a+b")
a+b
- 데이터 타입
>>> print(type("안녕하세요")) <class 'str'>
불 데이터 : 불린
- 참 또는 거짓을 표현할 때 사용
- 참이나 거짓만 저장하며 단독으로 사용하기보다 조건문이나 반복문 등과 함께 주로 사용
>>> print(type(True))
<class 'bool'>
기본 자료형
유형 자료형 설명 예 선언 형태
수치형 | 정수형 | 양수와 정수 | 1,2,3,100,-9 | data =1 |
수치형 | 실수형 | 소수점이 포함된 실수 | 10.2,-9.3,9.0 | data=9.0 |
문자형 | 문자형 | 따옴표에 들어가 있는 문자형 | abc,a20abc | data=’abc’ |
논리형 | 불린형 | 참 또는 거짓 | True, False | data=True |
자료형 확인하기
- 빈칸에 들어갈 자료형 예상해보기
>>> type('Hello Python')
<class ' '>
>>> type(123)
<class ' '>
>>> type(3.14)
<class ' '>
>>> type(True)
<class ' '>
정답
- str, int, float, bool
연산
다양한 자료형을 사용해 간단한 연산 가능
연산자와 피연산자로 구분
- 연산자 : 연산을 나타내는 기호 (+,-,*,/)
- 피연산자 : 연산의 대상이 되는 값
사칙연산
- 파이썬 덧셈 연산자 → (+)
- 파이썬 뺄셈 연산자 → (-)
- 파이썬 곱셈 연산자 → (*)
- 파이썬 나눗셈 연산자 → (/)
산술연산자
연산자 의미 사용 예 설명
= | 대입 연산자 | a=3 | 정수 3을 a 에 대입 |
+ | 더하기 | a=5+3 | 5와 3을 더한 값을 a에 대입 |
- | 빼기 | a=5-3 | 5에서 3을 뺀 값을 a에 대입 |
* | 곱하기 | a=5*3 | 5와 3을 곱한 값을 a에 대입 |
/ | 나누기 | a=5/3 | 5를 3으로 나눈 값을 a에 대입 |
// | 나누기(몫) | a=5//3 | 5를 3으로 나눈 후 소수점을 버리고 값을 a에 대입 |
% | 나머지 값 | a=5%3 | 5를 3으로 나눈 후 나머지값을 a에 대입 |
** | 제곱 | a=5**3 | 5의 3제곱을 a에 대입 |
- 나눗셈의 몫과 나머지
- 나머지,몫,나머지
>>> print(7/2) # 7 나누기 2 3.5 >>> print(7//2) # 7 나누기 2의 몫 3 >>> print(7%2) # 7 나누기 2의 나머지 1
나눗셈 주의사항
- 나눗셈 결과값의 자료형은 항상 실수형
>>> type(10/2) # 나머지가 없는 경우
<class 'float'>
>>> type(10/3) # 나머지가 있는 경우
<class 'float'>
- 결과값의 자료형이 정수형이길 원한다면 직접 자료형 변환 필요
- 나머지가 있는 경우에 소수점 이하의 데이터 손실
자료형 변환을 하지 않은 경우
>>> num1=10
>>> num2=3
>>> result = num1/num2
>>> result
3.333333333333335
>>> type(result)
<class 'float'>
정수형으로 변환을 한 경우
>>> num1=10
>>> num2=3
>>> result = int(num1/num2)
# 자료형 변환
>>> result
3 # 소수점 이하 데이터 손실
>>> type(result)
<class 'int'>
제곱승
파이썬 제곱승 연산자 → (**)
>>> print(3*3*3*3*3)
243
>>> print(3**5)
243
자료형 변환
자료형을 자유롭게 바꿔가며 사용
- 정수형과 실수형 간 변환
>>> a=5
>>> print(a)
5
>>> a=float(5)
>>> print(a)
5.0
>>> print(type(a))
<class 'float'>
>>> a=10
>>> b=3
>>> print(a/b)
3.3333333333333335
- 실수형을 정수형으로 변환
>>> a=int(10.7)
>>> b=int(10.3)
>>> print(a+b)
20
>>> print(a)
10
>>> print(b)
10
형 변환을 하지 않아도 형 변환이 일어나는 경우
동적 타이핑 : 변수의 메모리 공간을 확보하는 행위가 프로그램 실행 시점에서 발생하는것
C, Java - 변수가 정수형이라고 사전에 선언 (ex. int data = 8)
Python - 변수의 자료형을 인터프리터가 판단 (ex. data = 8)
동적 타이핑으로 나타나는 현상 : 값의 크기 비교
- 문자형으로 선언된 값의 정수형 또는 실수형으로의 변환
>>> a = '76.3'
>>> b = float(a)
>>> print(a)
76.3
>>> print(b)
76.3
>>> print(a+b)
TypeError: can only concatenate str (not "float") to str
a를 실수형으로 변환
>>> a=float(a)
>>> b=a
>>> print(a+b)
152.6
a,b를 문자형으로 변환
>>> a = str(a)
>>> b = str(b)
>>> print(a+b)
76.376.3
리스트
프로그래밍에서 한개의 변수에 모든값을 저장할 수 있는 방식을 일반적으로 배열, 파이썬에서는 리스트라고 함
하나의 변수에 여러 값을 저장하는 자료형
파이썬 시퀀스 자료형 : 여러 자료를 순서대로 넣는다는 뜻
리스트에는 하나의 자료형만 저장하지 않고 정수형이나 실수형처럼 다양한 자료형을 포함시킬 수 있음
colors = [’red’, ‘blue’, ‘green’]
colors →
‘red’ | ‘blue’ | ‘green’ |
인덱싱과 슬라이싱
- 인덱싱
리스트에 저장되어 있는 값에 접근하기 위해 이 값의 상대적인 주소를 사용
주소는 첫 번째 값을 0으로 했을 때 첫 번째 값과 얼마나 떨어져 있는지를 나타내는 것
인덱스 주소 또는 인덱스 값이라고 함
colors = ['red', 'blue', 'green']
print(colors[0])
print(colors[2])
print(len(colors))
>>> red
>>> green
>>> 3
리스트의 주소값이 0부터 시작하는 이유
1부터 시작하는 것보다 0부터 시작하면 이진수 관점에서 메모리를 절약할 수 있다는 장점
진수에서 00부터 사용할 수 있는 장점
초창기 컴퓨터는 메모리 절약이 매우 중요했다.
- 슬라이싱
리스트에서 파생된 강력한 기능 중 하나
리스트의 인덱스 기능을 사용하여 전체 리스트에서 일부를 잘라내어 사용
>>> cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
0부터 7까지의 인덱스를 가진 총 8개의 값
값 ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
인덱스 0 1 2 3 4 5 6 7
슬라이싱의 기본문법
💡 변수명[시작 인덱스:마지막 인덱스]
‘마지막 인덱스 -1’ 까지만 출력
>>> cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
>>> cities[0:6]
['서울', '부산', '인천', '대구', '대전', '광주']
>>> cities [0:5]
['서울', '부산', '인천', '대구', '대전']
>>> cities[5:]
['광주', '울산', '수원']
리버스 인덱스
기존 인덱스와 달리 마지막 값부터 -1까지 할당하여 첫 번째 값까지 역순으로 올라오는 방식
값 ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
인덱스 -8 -7 -6 -5 -4 -3 -2 -1
>>> cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
>>> cities[-8:] #-8의 인덱스값부터 끝까지 출력하라는 뜻
['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
인덱스 범위를 넘어가는 슬라이싱
슬라이싱을 할 때 인덱스의 첫 번째 값이나 마지막 값이 비어 있어도 잘 작동함
>>> cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
>>> cities[:] #cities 변수의 처음부터 끝까지
['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
>>> cities[-50:50] #범위를 넘어갈 경우 자동으로 최대 범위를 지정
['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
증가값
슬라이싱에서는 시작 인덱스와 마지막 인덱스 외에도 마지막 자리에 증가값을 넣을 수 있음
💡 변수명[시작 인덱스:마지막인덱스:증가값]
>>> cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
>>> cities[::2] #2칸 단위로
['서울', '인천', '대전', '울산']
>>> cities[::-1] #역으로 슬라이싱
['수원', '울산', '광주', '대전', '대구', '인천', '부산', '서울']
리스트의 연산
- 덧셈 연산
>>> color1 = ['red', 'blue', 'green']
>>> color2 = ['orange', 'black', 'white']
>>> print(color1+color2) #두 리스트 합치기
['red', 'blue', 'green', 'orange', 'black', 'white']
>>> len(color1) #리스트 길이
3
>>> total_color = color1+color2
>>> total_color
['red', 'blue', 'green', 'orange', 'black', 'white']
- 곱셈 연산
리스트에 n을 곱했을 때 해당 리스트를 n배만큼 늘려줌
>>> color1 * 2
['red', 'blue', 'green', 'red', 'blue', 'green']
- in 연산
in 연산은 포함 여부를 확인하는 연산으로 하나의 값이 해당 리스트에 들어있는지 확인 가능
>>> 'blue' in color2 #color2 변수에서 문자열 'blue'의 존재 여부 반환
False
color2 = [’orange’, ‘black’, ‘white’] 에서 ‘blue’라는 문자열값은 없으므로 False
리스트 추가 및 삭제
기존의 리스트를 변경하거나 새로운 값을 추가, 삭제하는 연산
- append()함수
리스트 맨 마지막 인덱스에 새로운 값을 추가
>>> color = ['red', 'blue', 'green']
>>> color.append('white')
>>> color
['red', 'blue', 'green', 'white']
- extend() 함수
리스트의 덧셈 연산과 같음
값을 추가하는 것이 아닌 기존 리스트에 그대로 새로운 리스트를 합치는 기능
>>> color = ['red', 'blue', 'green']
>>>
>>> color.extend(['black', 'purple'])
>>> color
['red', 'blue', 'green', 'black', 'purple']
- insert() 함수
append() 함수와 달리 리스트의 특정 위치에 값을 추가
리스트의 맨 마지막에 값이 들어가는 것이 아니라 지정한 위치에 값이 들어감
>>> color = ['red', 'blue', 'green']
>>>
>>> color.insert(0, 'orange')
>>> color
['orange', 'red', 'blue', 'green']
- remove() 함수
리스트에 있는 특정 값을 지우는 기능
삭제할 값을 remove() 함수 안에 넣으면 리스트에 있는 해당 값이 삭제됨
>>> color
['orange', 'red', 'blue', 'green']
>>>
>>> color.remove('red')
>>> color
['orange', 'blue', 'green']
값이 사라지고 그 다음 값들이 한 칸씩 앞으로 이동
- 인덱스의 재할당과 삭제
특정 인덱스값을 변경(재할당)하거나 삭제하는 방법
>>> color = ['red', 'blue', 'green']
>>> color[0] = 'orange'
>>> color
['orange', 'blue', 'green']
>>> del color[0]
>>> color
['blue', 'green']
- 리스트 추가 및 삭제 함수
함수 기능 용례
append() | 새로운 값을 기존 리스트의 맨 끝에 추가 | color.append(’white’) |
extend() | 새로운 리스트를 기존 리스트에 추가(덧셈연산과 같은 효과) | color.extend([’black’, ‘purple’]) |
insert() | 기존 리스트의 i번째 인덱스에 새로운 값을 추가, i번째 인덱스를 기준으로 뒤쪽의 인덱스는 하나씩 밀림 | color.insert(0,’orange’) |
remove() | 리스트 내의 특정 값을 삭제 | color.remove(’white’) |
del | 특정 인덱스값을 삭제 | del color[0] |
패킹과 언패킹
>>> t = [1,2,3]
>>> a, b, c = t
>>> print(t, a, b, c)
[1,2,3]1 2 3
패킹 : 한 변수에 여러개의 데이터를 할당하는 자체를 패킹이라고 함, 변수 t는 값 1,2,3을 패킹한 것
언패킹: 한 변수에 여러 개의 데이터가 들어있을 때 그것을 각각의 변수로 반환하는 방법, t에 있는 값 1,2,3을 변수 a, b, c에 할당해주는 것
이차원 리스트
리스트를 효율적으로 활용하기 위해 여러개의 리스트를 하나의 변수에 할당하는 이차원 리스트 사용 가능. 이차원 리스트는 행렬과 같은 개념
학생 A B C D E
국어 점수 | 49 | 79 | 20 | 100 | 80 |
수학 점수 | 43 | 59 | 85 | 30 | 90 |
영어 점수 | 49 | 79 | 48 | 60 | 100 |
표에 값을 채웠을 때 생기는 값들의 집합
국어 점수, 수학 점수, 영어 점수 → 각각 하나의 리스트
여러 개의 리스트 값들이 모두 하나의 리스트 변수에 할당 → 이차원 리스트
- 이차원 리스트를 하나의 변수로 표현
>>> kor_score = [49, 79, 20, 100, 80]
>>> math_score = [43, 59, 85, 30, 90]
>>> eng_score = [49, 79, 48, 60, 100]
>>> midterm_score = [kor_score, math_score, eng_score]
>>> midterm_score
[[49, 79, 20, 100, 80], [43, 59, 85, 30, 90], [49, 79, 48, 60, 100]]
국어 점수 → kor_score
수학 점수 → math_score
영어 점수 → eng_score
모든 변수를 할당한 이차원 리스트 → midterm_score
>>> print(midterm_score[0][2])
20
실습
빈칸에 알맞은 코드 작성하기
>>> a = [1]
>>> b = ['a','b','c']
>>>
>>> b
['a',[1],'c']
- 정답→ b[1] = a / a[0:1]
- b의 리스트에서 ‘b’값이 [1], 즉 a로 변경되어 출력되었으므로 b의 1번 인덱스가 변경되어야 한다. 이때 b에 리스트로 값이 들어갔으므로 a 를 넣거나 a[0:1]으로 슬라이싱해준다.
다음 코드의 실행 결과 예상하기
>>> fruit1 = ['orange', 'melon', 'strawberry']
>>> fruit2 = ['watermelon', 'grape']
>>> fruit2.remove('grape')
>>> fruit1.append(fruit2)
>>> print(fruit1)
- 정답
- remove를 사용해서 fruit2 리스트에서 ‘grape’을 삭제하였다.
- 그리고 fruit1에 append를 사용해서 fruit2를 리스트에 추가해주었으므로 fruit1을 출력하면 fruit2 리스트가 추가되어 출력된다.
- ['orange', 'melon', 'strawberry', ['watermelon']]
다음 코드의 실행 결과 예상하기
fruits = ['apple', 'banana', 'cherry', 'grape', 'orange', 'strawberry', 'melon']
print(fruits[-3:], fruits[1::3])
- 정답
- fruits[-3:] : fruits 리스트에서 -3인덱스부터 끝까지를 의미 → ['orange', 'strawberry', 'melon']
- fruits[1::3] : fruits 리스트에서 1번째 인덱스부터 끝까지 3씩 증가하는 것을 의미 → [’banana’, ‘orange’]
#출력결과
['orange', 'strawberry', 'melon'] ['banana', 'orange']
다음 코드의 실행 결과 예상하기
first = ['egg', 'salad', 'bread', 'soup', 'canafe']
second = ['fish', 'lamb', 'pork', 'beef', 'chiken']
third = ['apple', 'banana', 'orange', 'grape', 'mango']
order = [first, second, third]
john = [order[0][:-2], second[1::3], third[0]]
del john[2]
john.extend([order[2][0:1]])
print(john)
정답
order[0][:-2] : order 변수에서 0번째 인덱스 first 리스트에서 처음부터 -3인덱스(-2-1)까지 출력하라는 의미(이차원리스트)
→ ['egg', 'salad', 'bread']
second[1::3] : second 리스트에서 1번째 인덱스부터 끝까지 3칸 단위로 증가
→ [’lamb’, ’chiken’]
third[0] : third 리스트의 0번째 인덱스
→ apple
del john[2] : john 리스트의 2번째 인덱스 값 삭제
→ apple 삭제
john.extend([order[2][0:1]]) : john 리스트에 [order[2][0:1]] 즉 [‘apple’] 추가
#출력결과
[['egg', 'salad', 'bread'], ['lamb', 'chiken'], ['apple']]
'스터디 > 파이썬 스터디 강의자료' 카테고리의 다른 글
[1팀/지다인] 2차시 파이썬 스터디- 자료형 (1) | 2023.03.16 |
---|---|
[4팀/김민혜] 1차시 파이썬 스터디 - 입출력 (0) | 2023.03.16 |
[3팀/이지현] 2차시 파이썬 스터디 - 자료형 (0) | 2023.03.15 |
[2팀/김가림, 최다예] 2차시 파이썬 스터디 - 자료형 (2) | 2023.03.15 |
[3팀/김규리] 2차시 파이썬 스터디 - 자료형 (1) | 2023.03.14 |