새싹 인공지능 응용sw 개발자 양성 교육 프로그램 나예진 강사님 수업 정리 글입니다. (나예진 강사님 이메일: nayejin11@gmail.com)
목차
1. 숫자형 데이터 numeric data types
2. 연속형데이터 sequence types
2-1. 문자열(string)
2-2. 리스트(list)
2-3. 튜플(tuple)
3. 딕셔너리 dictionary
4. 집합 자료형 set
5. 불 자료형 bool
변수는 데이터를 담는 그릇
변수에 데이터를 저장할 때는 =를 사용한다. 이 때 =를 assignment operator라고 부른다.
integer(정수형) : 숫자형의 하나로 소수점이 없는 정수
float(실수형) : 숫자형의 하나로 소수점이 있는 실수
complex(복소수) : 실수와 허수의 합인 복소수
s2 = """TO Be Great is
To Be Miunderstood.
-ralph Waldo Cmerson
"""
print(s2) # 변수 저장된 그대로 출력
s2 #₩ = 백슬래시 = 출력 입력하세요
-> 출력
TO Be Great is
To Be Miunderstood.
-ralph Waldo Cmerson
TO Be Great is\nTo Be Miunderstood.\n-ralph Waldo Cmerson\n
문자, 단어 등으로 구성된 문자들의 집합(문자형은 문자를 다룰 수 있는 다양한 추가, 삽입, 수정, 삭제 기능을 제공
#\n = new line
print("hellow\nworld")
-> 출력
hellow world
#문자열 연산하기
s = "hello"
s1 ="world"
#가운데 빈칸을 넣을 때
s + ' ' + s1
# 1) print former 사용
apple = "사과" ; count = 4
print("%s는 %d개 있다." %(apple, count)) #%s = string %d= double
# 2) str.format
print("{}는 {}개 있다.".format(apple, count))
# 3) f-string
print(f"{apple}는 {count}개 있다.")
-> 출력
사과는 4개 있다.
#(영어) 대소문자 바꾸기 upper(), lower()
s = "hi"
s.upper()
d = "HI"
s.lower()
#문자 공백 지우기 strip()
s = " h i "
s.strip()
#문자열 삽입 join()
"=".join("adcd")
-> a=d=c=d
#문자열 나누기 split()
s = "Life is too short."
s.split() #token
-> ['life', 'is', 'too', 'short.']
#문자열 바꾸기 replace()
s = "Life is too short."
#life를 this pencil로 바꿔봅시다
s.replace("Life", "THIS pencil")
#s.replace(" ", " ")
-> THIS pencil is too short.
리스트를 사용하여 데이터를 묶어서 사용할 수 있으며 불필요하게 각 각의 변수를 생성하여 데이터를 하나씩 담아줘야하는 문제점을 개선함
리스트는 문자형처럼 인덱싱(indexing)과 슬라이싱(slicing)으로 사용 가능하며 수정, 삭제, 추가, 정렬, 뒤집기, 삽입 등 모두 가능
#리스트를 만드는 방법
L = [1, 2, 3]
L
-> [1, 2, 3]
#L의 첫번째 원소
L[0]
-> 1
#L의 마지막 원소 # - = 끝에서 , -1 = 끝에서 첫번 째
L[-1]
->3
#list 수정하기
L[2] = 1
L
->[1, 2, 1]
문자열 안의 특정한 값을 뽑아내는 작업
#이중중첩
L2 = [1, [2, 3], 5]
L2
->[1, [2, 3], 5]
L2[1][0]
->2 = 2번째 원소인 리스트의 1번째 원소
a[시작번호 : 끝번호] : 자리번호 시작번호부터 끝번호까지 문자를 뽑아낸다는 뜻이다.
L = [1, 2, 3, 4, 5]
L[1:4]
-> [2, 3, 4]
L[:-1] #시작 index를 생략하면, 문자열의 처음부터 뽑아낸다.
#L[:-1] == L[:len(L)-1] == L[:5-1] == L[:4]
-> [1, 2, 3, 4]
L[-2:] #끝 index를 생햑하면, 문자열의 그 문자열의 끝까지 뽑아낸다.
-> [4, 5]
#리스트에 원소 추가하기 APPEND()(***)
L = []
L.append(3)
L.append(2)
L.append(1)
L
-> [3, 2, 1]
# 리스트 원소 정렬하기 sort(), 엑셀에서의 필터
#sort()를 이용해 L을 정렬합니다.
L = [4, 3, 16]
L.sort() #ascending order
#L.sort(reverse=true) #descending order
L
-> [3, 4, 16]
#리스트 뒤집기(정렬X) reverse()
L = [1, 2, 3, 4, 5, 6]
L[::-1]
-> [6, 5, 4, 3, 2, 1]
#리스트에서 원소 제거하기 pop()
# L1 = L.pop()
print(L1)
L2 = L.pop()
print(L2)
튜플은 2가지 점을 제외하고는 전반적으로 리스트와 유사하며 차이점은 아래와 같은
리스트는 []를 사용하고, 튜플은 ()을 사용한다.
리스트는 생성 후에 변경가능하고(mutable)튜플은 생성 후에 변경이 불가능하다.
튜플안에 리스트 변경 가능
리스트안에 튜블 변경 불가능
t = (1, 2)
t
->(1, 2)
t[0] -> 1
t[-1] -> 2
t2 = ('a', 'b', ('a', 'b'))
t2
->('a', 'b', ('a', 'b'))
t2[:2]
-> ('a', 'b')
t = (1, 2)
t2 = (3, 4)
t + t2
->(1, 2, 3, 4)
t2 * 3
-> (3, 4, 3, 4, 3, 4)
len(t * 3)
-> 6
자바스크립트에서 배열과 유사하기 key와 value를 갖고 있으며, 리스트와 같이 순차적인 index값을 요구하지 않고 key 값을 통해 value를 얻음
-> {key1:value1, key2:value2, key3:value3 ... }
파이썬에서 제공하는 사전 자료형은 key-value방법을 통해 저장한다.
#사전을 만드는 방법
D = {}
type(D)
-> dict
#위에 나온 테이블 예시를 닥셔너리으로 만들어 봅니다.
D = {'John' : '0011' , 'Maria' : '1234'}
D['John'] #앞에 있는 것이 key - john, 뒤에 있는것이 value -0011
-> '0011'
#사전 D에 key가 'a'이고 value가 3인 원소를 추가하자
D['a'] = 4 #assignment를 할 때, key값이 없다면 key-value pair를 추가, 있다면, value를 수정
D
#비교, 리스트의 경우
#L = [1, 2, 3]
#L[0] = 4
#L
-> {'John': '0011', 'Maria': '1234', 'a': 4}
#key값이 이미 존재하는 경우에는 key값을 통한 indexing이 되며, key 값이 존재하지 않을 때는 assignment
D["b"]
사전을 만들 때 KEY는 중복이 있으면 절대 안 된다. 사전에서 KEY가 될 수 있는 DATATYPE은 immutable(불변)이어야 한다
사전 관련 함수 사전에 모든 ket값들 보기 keys()
D = {'name' : 'kim', 'phone' : '01012345678', 'birth' : '1234'}
D.keys()
-> dict_keys(['name', 'phone', 'birth'])
#사전의 모든 value들 보기 values()
D.values()
-> dict_values(['kim', '01012345678', '1234'])
#사전의 모든 key, value쌍 보기 items()
D.items()
->
#사전의 원소 가져오기 get()
#D['name']과 같다.
D.get('phone', 'seoul')
-> 01012345678
집합은 중복을 허용하지 않기 때문에 집합으로 변환시켰을 때 중복된 값은 제거됨
집합은 순서가 없기 때문에 저장된 값을 인덱싱으로 접근 불가
집합에서 인덱싱으로 저장된 값을 저장하기 위해서는 자료형을 리스트나 튜플로 변환 후 제어해야 함
집합은 교집합, 합집합, 차집합을 구하는 데 이용함
집합 형태는 index가 없다.
s = {1, 2, 3}
s, type(s)
-> ({1, 2, 3}, set)
s1 = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}
#s1과 s2의 교집합
s1 & s2
-> {3, 4, 5}
s1. intersection(s2)
-> {3, 4, 5}
#합집합
s1 | s2
-> {1, 2, 3, 4, 5, 6, 7}
#차집합 : 공통된 원소를 빼는 것
s1 - s2
->{1, 2}
s2 - s1
-> {6, 7}
L = [1,2, 3, 3, 4, 1, 2, 34, 5, 6, 1, 2]
print(len(set(L)))
set(L)
-> 7
{1, 2, 3, 4, 5, 6, 34}
# 집합 관련 함수 집합에 원소 하나 추가하기 add()
s = {1, 2, 3}
# s.union({4, 5})
s.update({4, 5}) #s. union({4,5}) 출력 결과는 같지만, 의미가 다르다.
s
-> {1, 2, 3}
#집합에서 원소 제거하기 remove()
s.remove(3)
s
->{1, 2, 4, 5}
불 자료형은 참(true)와 거짓(false)로 나타내는 자료형으로, 위 2가지 값만 가질 수 있음### in
사전에 해당 key 값이 존재하는 지 확인하기 in
in 이라는 operator는 사전뿐만 아니라 모든 연속형 데이터 타입에 사용할 수 있다.
사전의 경우에는 key값을 대상으로 하고, 리스트, 튜플, 집합, 문자열에 대해서는 해당 원소가 존재하는 지 찾아서 true/ false를 알려준다.
"phone" in D
-> true
"major" in D
-> false