본문 바로가기
공부기록/Python

6월 8일 (2) python - 데이터 유형

by project100 2023. 6. 8.

 데이터의 유형

1. 숫자형 - int 정수, float 실수

2. bool - True/False 값, 비교/ 논리 연산의 결과

3. 시퀀스 - 값이 연속적으로 이어진 형태(순서 있음)

1)  문자열 - 문자의 나열, ' , ", ''', """  4가지 사용 가능

                    '''. """ - 여러 줄의 문자열을 작성할 때 사용  예) ''' 첫번째 줄 

                                                                                                  두번째  줄 '''

                    ', " - 한 줄 문자열을 작성할 때 주로 사용   

    전체 문자열(A)  내에 ' 또는 "를 출력할 경우

    A를 ' 로 묶고 내부에서 " 를 사용, A를 " 로 묶고 내부에서 ' 를 사용

2)  리스트 - 배열과 유사함. 원소의 변경, 추가, 삭제 가능

                    [ ] 사용, 각 값은 ' , ' 로 구분하여 작성, 데이터 유형에 상관없이 저장 가능

                    문법)  식별자 = [값1, 값2, 값3, 값4, ....]

                               빈 리스트 : 식별자 = []   / 식별자 = list()

3) 튜플 - 수정할 수 없는 배열, 원소의 변경, 추가, 삭제가 불가능, 최초 생성 시 작성된 내용을 유지

               ( ) 사용. 각 값은 ' , '로 구분하여 작성, 데이터 유형에 상관없이 저장 가능

               문법) 식별자 = (값1, 값2, 값3, .....)

               요소가 1개인 튜플 생성 : 식별자 = (값,)

               range사용하여 생성 : 식별자 = tuple(range())

               튜플 -> 리스트 : list(tuple 식별자)

               리스트 -> 튜플 : tuple(list 식별자)

4. 딕셔너리 - Map과 유사(거의 동일), key와 value 의 쌍으로 저장

                     생성 문법) 식별자 = {key1:value1, key2:value2, ....}

                     인적정보, 제품정보 등 저장, 관리하기 위한 유형

5. 집합 - 순서 없음, 중복이 허용되지 않음

 

range(수치) 함수 : 범위 값 생성 함수. 0부터 수치 -1까지 값을 생성, 순차적

예) a = list(range(5)) => [0, 1 ,2, 3, 4]

사용법) 

range(start, end) : start ~ (end - 1) 생성

range(strar, end, step) : start ~ (end - 1) 까지 step 간격으로 생성

예) range(1, 10, 2) => 1, 3, 5, 7, 9 생성

range(big, small, -step) : 큰수부터 역순으로 생성

예) range(10, 0, -1) => 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 생성

리스트나 튜플에서 사용할 값을 생성할 때 주로 사용

 

자료구조(Data Structure) 에서 데이터를 추가 - push

데이터를 꺼내는 것 - pop

 

슬라이스 : 일부 요소의 추출 및 변경, 추출 시에는 원본 유지됨

리스트[start:end] - start부터 end-1까치 추출

리스트[start:end:step] - start부터 end-1까지 step만큼 건너띄며 요소 추출

리스트[:end] - 처음부터 end-1까지 추출

리스트[start:] - start부터 끝까치 추출

리스트[:] - 전체 추출(= 리스트[::])

리스트[:end:step], 리스트[start::step], 리스트[::step]

 

리스트 슬라이스 후  값을 대입하면 추출된 원소 대신 새로운 데이터를 삽입할 수 있음. 띄엄띄엄 교체도 가능

 

시퀀스 형 공통 명령어

in / not in : 원소의 존재 여부 확인. 결과값은 bool 형 True / False

 

문자열 예시

s1 = 'hello world'
s2 = "hello world"
s3 = '''hello world'''
s4 = """hello world"""

s5 = 'hello "python" world'
s6 = "hello 'python' world"

s7 = '''첫번째 줄
두 번째 줄 문장 길게 입력
하기
'''

print(s7)

# 문자열 연산
# '+' : 문자열 결합
str1 = "hello"
str2 = " world"
print(str1 + str2)

# '*' : 문자열 반복
print(str1 * 3) 
print("=" * 20)
print(str1[1])
print(str2[-1]) # 시퀀스의 뒤에서부터 순번 처리, 제일 마지막 문자열 -1

리스트 예시

l1 = [0,1,2,'3',4]
print(l1)

print(l1[2])

# 원소 변경
l1[3] = 3
print(l1)

l2 = list(range(10, 0, -1))
print(l2)

print('=' * 30)
# 리스트 추가 삭제
# append - 리스트의 마지막에 원소 추가
l3 = []
l3.append(1)
l3.append(2)
print(l3)

# insert - 리스트의 지정 위치에 원소 추가
l3.insert(1, 5)
print(l3)

# pop -  리스트의 마지막 원소 꺼내기 (삭제)
x = l3.pop()
print(x, l3, sep='\n')
l3.append(3)
l3.append(4)
l3.append(5)
print(len(l3)) # len() 리스트의 크기(원소의 개수) 
print(l3)
#y = l3.pop(2) # 순번 지정하여 원하는 위치의 값 꺼내오기
#print(y, l3, sep="\n")
#print(l3.pop()) # 출력과 동시에 리스트에서 삭제
#print(l3)

# remove - 리스트의 지정 값 원소 삭제(첫번째 값만 삭제)
l3.remove(5) 
print(l3)

print('=' * 30)
# 기타 함수
# sort - 원소 정렬
l4 = [4, 5, 1, 3, 7, 2]
l4.sort()
print(l4)
l5 = ['a', 'z', 'm', 'c']
l5.sort()
print(l5)
l6 = ['가','다','마','라']
l6.sort()
print(l6)

# reverse - 원소 배치 반전
l4.reverse()
print(l4)

# index - 원소의 위치값 구하기
i = l4.index(3)
print(i)

# 슬라이스(부분 추출 또는 변경)
print(l4[0:3], l4)
s1 = l4[1:4]
print(s1)

# 리스트[start:end] : start부터 end-1 까지 추출
# 리스트[start:end:step] : start부터 end-1까지 step 간격으로 추출
l4.append(0)
print(l4, len(l4))
s1 = l4[0:-1:2]
print(s1)

s1 = l4[0:len(l4):2]
print(s1)
s1 = l4[:len(l4):2]
print(s1)
s1 = l4[0::2]
print(s1)
s1 = l4[::2]
print(s1)
s1 = l4[:] # 리스트 복사(전체 추출)
print(s1)

print('=' * 30)
l7 = list(range(0, 100, 10))
print(l7)

l7[2:5] = [333, 444, 555]
print(l7)

# 복원
l7 = list(range(0, 100, 10))
#l7[2:5] =[333]
l7[2:5] = [333, 444, 555, 777, 666, 888]
print(l7)

# 복원
l7 = list(range(0, 100, 10))
l7[2:10:2] =[333, 444, 555, 666]
#l7[2:8:2] =[333, 444, 555]
print(l7)

 

튜플 예시

t1 = (1, 2, 3, 4)
print(t1)
print(t1[2])
#print[1] = 10 - 오류
#t1.pop() - 오류
#t1.insert(2, 7) - 오류

t2 = ('a',)
print(t2)

t3 = tuple(range(10))
print(t3)

l1 = list(range(1,10,2))
t4 = tuple(l1) # 데이터의 고정화
print(t4)

print(len(t4))

a = t4.index(5) # 5의 순번(인덱스)
print(a)

# 원소의 존재 유무 확인 in / not in 결과값 bool 형 True/False
b = 8 in t4
print(b)

c = 8 not in t4
print(c)

str = 'hello python world'
d = 'a' in str
e = 'a' not in str
print(d, e)

딕셔너리 예시

d1 = {1:'one', 2:'two'}
print(d1)
print(d1[1])
print(d1[2])

# 딕션너리에 추가
d1[3] = 'three'
print(d1)

d1['four'] = 4
print(d1)

person1 = {"name" : "홍길동"}
person1["age"] = 20
person1["addr"] = "인천시 미추홀구"
print(person1)
print(person1["addr"])

# key 목록만 추출
k1 = list(person1.keys())
print(k1)
# value 목록만 추출
v1 = list(person1.values())
print(v1)

item = list(person1.items())
print(item)

# 값을 꺼내오는 함수 : get()
print(person1.get("phone")) # 없는 경우 None 출력
#print(person1["phone"]) - 오류

# in을 사용하여 key 존재 유무 확인
b = "phone" in person1
print(b)

 

ValueError: attempt to assign sequence of size 4 to extended slice of size 3

TypeError: 'builtin_function_or_method' object does not support item assignment

AttributeError: 'tuple' object has no attribute 'pop'

AttributeError: 'tuple' object has no attribute 'insert'

KeyError: 'phone'