집합형 데이터
문자열과 리스트, 그 다음으로 튜플에 대한 설명입니다.
튜플
일단 집합형 자료형이구요.
리스트와 대동소이합니다. 순서가 존재하고, 중복이 가능하지요.
하지만 다른점이 있는데, 값 변경이 불가능하다는 것입니다. ==> immutable data, 그로 인해서 제공되지 않는 함수가 많습니다. ==> 반대로 말해서 튜플은 함수 파트에서 외울게 별로 없다는 것! 하하하.
변수명 = (value)을 직접 사용해서 tuple을 선언할 수도 있고, tuple(value)으로 선언할 수도 있습니다.
**주의할 점은 1개의 값을 갖는 튜플은 반드시 (값, )으로 선언해야합니다. (value)로 선언하면 정수는 int형, 문자는 str으로 저장됩니다.
"""
집합형 자료형
1) 문자열
2) 리스트
3) 튜플
a. 문자열 생성 방법
(1) 변수명 = (value) 직접 사용
(2) 변수명 = tuple(value)
주의할 점 : 값 하나를 가진 튜플은 반드시 (값, ) 쉼표를 사용.
b. 문자열 제공 함수 ==> dir(tuple) 확인 가능
c. 인덱싱 및 슬라이싱
d. 문자열 특징
- 리스트와 동일한 특징 ( 순서 존재, 중복 가능 )
- But, 값 변경 불가(immutable) ==> append, insert, remove, pop, sort, reverse 등의 함수 미제공
"""
먼저 튜플을 생성해봅니다.
변수 = ( value ) 혹은 tuple(value)로 생성합니다.
이때, 값이 1개면 (value, ) 잊지마세요. 그렇지 않으면 tuple이 아니라 그냥 value값의 데이터형으로 저장됩니다.
#1. 튜플 생성
tuple_data = (10, 20, 20, 30)
tuple_data2 = tuple("hello")
tuple_data3 = tuple(["A", "B"])
print(tuple_data, type(tuple_data)) # (10, 20, 20, 30) <class 'tuple'>
print(tuple_data2, type(tuple_data2)) # ('h', 'e', 'l', 'l', 'o') <class 'tuple'>
print(tuple_data3, type(tuple_data3)) # ('A', 'B') <class 'tuple'>
print("="*50)
#정수값 10을 가진 튜플을 변수 n에 저장하시오.
n = (10,) #그냥 (10) => int로 저장
a = tuple((12,))
print(n, type(n)) #(10,) <class 'tuple'>
print(a, type(a)) #(12,) <class 'tuple'>
print("="*50)
튜플에서 사용할 수 있는 함수들입니다.
count와 index를 제외하고는 모두 외부 패키지의 함수들입니다.
"""
## 외부 패키지의 함수
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__',
## 튜플 내의 함수
'count', 'index']
"""
튜플 내의 함수인 count()와 index(), 자주 쓰이는 len()과 멤버십 연산자 정도만 살펴보겠습니다.
len()은 튜플의 길이를, count는 특정값이 얼마나 포함되어있는지, index는 특정값의 위치를 알려줍니다.
멤버십 연산자는 특정 값이 해당 튜플에 존재하는지 여부를 알려줍니다. 특정값 in 튜플(집합형 데이터)
#2. 튜플 함수
print(dir(tuple))
s = (10, 20, 20, 30)
print("1. 튜플 길이:", len(s)) # 1. 튜플 길이: 4
print("2. 특정값 포함 갯수:", s.count(10)) # 2. 특정값 포함 갯수: 1
print("3. 특정값 위치:", s.index((30))) # 3. 3. 특정값 위치: 3
print("4. 멤버십 연산자:", 10 in s) # 4. 멤버십 연산자: True
print("4. 멤버십 연산자:", 100 in s) # 4. 멤버십 연산자: False
튜플 역시도 인덱싱(indexing)과 슬라이싱(slicing)이 가능합니다.
순방향과 역방향 모두 가능합니다.
#3. 인덱싱 및 슬라이싱
#1. 인덱싱
n = [10, 20, 30, 30, 40, 50, 60]
print("1:", n[0]) #10
print("2:", n[3]) #30
print("3:", n[-1]) #60
print("4:", n[-3]) #40
print("="*100)
슬라이싱에서 step을 주어서 띄엄띄엄 값을 읽을 수도 있으며
step을 -1로 주면 뒤에서부터 역방향 정렬합니다.
#2. 슬라이싱 ==> 범위지정해서 검색 방법
m = (10, 20, 30, 30, 40, 50, 60, 70, 70, 80, 90, 100)
# 가. 순방향: 앞에서부터 검색(양수 이동)
print("5:", m[0:5]) # (10, 20, 30, 30, 40)
print("6:", m[3:8]) # (30, 40, 50, 60)
print("7:", m[:8]) # (10, 20, 30, 30, 40, 50, 60, 70)
print("8:", m[:8]) # (10, 20, 30, 30, 40, 50, 60, 70)
print("9:", m[1:]) # (20, 30, 30, 40, 50, 60, 70, 70, 80, 90, 100)
print("10:", m[:]) # (10, 20, 30, 30, 40, 50, 60, 70, 70, 80, 90, 100)
print("11:", m[0:5:2]) # (10, 30, 40)
print("="*100)
# 나. 역방향: 뒤에서부터 검색 (음수 이동)
# m = [10, 20, 30, 30, 40, 50, 60, 70, 70, 80, 90, 100)
print("12:", m[-5:-1]) # (70, 70, 80, 90)
print("13:", m[-5:]) # (70, 70, 80, 90, 100)
print("15:", m[:-1]) # (10, 20, 30, 30, 40, 50, 60, 70, 70, 80, 90)
print("16: 역순(*****):", m[::-1]) # (100, 90, 80, 70, 70, 60, 50, 40, 30, 30, 20, 10)
print("="*100)
마지막으로, 중첩 리스트가 있었던 것처럼, 튜플도 중첩 튜플 (2중 튜플이 존재합니다.)
그리고 이 역시 마찬가지로 한 번에 값을 읽을 수 있습니다.
#3. 중첩 튜플
m = (1, 2, 3, (9, 8, 7, 6, 4))
# 질문? 7 값을 인덱싱하여 출력하시오.
m2 = m[3]
print(m2) # (9, 8, 7, 6, 4)
print(m2[2]) # 7
print(m[3][2]) # 7, 일반적인 사용법
# 질문2? 9, 8, 7, 6 값을 슬라이싱하여 출력하시오.
print(m[3][0:4]) # (9, 8, 7, 6)
print(m[3][-5:-1]) # (9, 8, 7, 6)
이렇게~~ 튜플형 정리를 마치고~
다음엔 셋형으로 돌아오것슴다.
고롬 이만~~
'SK 행복성장캠퍼스 > Python 기초' 카테고리의 다른 글
0902_3일차_셋 (0) | 2020.09.05 |
---|---|
Python_변할 수 있는 데이터_없는 데이터_mutable/immutable (0) | 2020.09.05 |
0901_2일차_연습문제 (0) | 2020.09.05 |
0901_2일차_Python08_리스트_얕은복사_깊은복사 (0) | 2020.09.05 |
0901_2일차_Python08_리스트_함수 (0) | 2020.09.05 |
댓글