study blog

Python 자료구조 1 - Sequence type(list, tuple, range) 본문

Python/2. built in types

Python 자료구조 1 - Sequence type(list, tuple, range)

ivo_lee 2020. 1. 23. 11:06

# 자료구조 

 

- Sequence 타입: list, tuple
- Mapping 타입: dict
- Set: set

1. Sequence Type

1) list 

- 임의의 객체를 순차적으로 저장하는 자료구조 
- 기호로는 [ ] (대괄호)를 이용

 

myList = list()  # 비어있는 list를 생성  
myList = []      # list를 literal(코드상으로 표현)로 표현  
myList = [1,2,3] # 3개의 값을 가지는 list를 생성  
myList = [1,3.14,True,"아우성"]  # 모든 데이터 타입 사용가능  
myList = [10,["Show","me","the","money"],3.14,True]  # list안에 list가능 (중첩구조) 
# list안에 또 다른 자료구조들을 넣을 수 있음!  

print(myList[2])    # 3.14 
print(myList[1][3])  # money 
print(myList[-1])   # True 
print(myList[0:1])  # [10]  #list형태로 나옴(slicing) - slicing결과는 원본 자료구조와 같게나옴 
print(myList[1][2:])  # ['the','money'] 



# list의 연산

a = [1,2,3] 
b = [4,5,6] 
print(a+b)  # [1,2,3,4,5,6]   문자열 연결  
print(a*3)  # [1,2,3,1,2,3,1,2,3]  문자열 3번 반복 


# list의 indexing & slicing

a = [1,2,3] 
a[0] = 5     #a : [5,2,3] 

a[0:1] = [7,8,9]   
print(a)    # [7,8,9,2,3]   # 대체시켜라  

a = [1,2,3] 
a[0:2] = [7,8,9] 
print(a)    # [7,8,9,3] 

a = [1,2,3]  
a[1:] = []    # slicing 한 부분을 다른 리스트로 대체 
print(a)    # [1] 

a = [1,2,3]  
a[0] = [7,8,9]    # list안에 list -> 1 대신 [7,8,9] 
print(a)    # [[7, 8, 9], 2, 3] 



# 값 제거시

# 2를 지우고 싶을 경우
a = [1,2,3]  
a[1:2] = [] 
# del a[1]   # 같은 방법 



# list에 적용할 수 있는 함수

 

# append

- list 마지막에 붙이는 함수 
- append는 맨 마지막 칸을 생성 후 그 안에 데이터를 집어넣는 것 -> 리스트로 들어가짐
a = [1,2,3] 
a.append("Hello")    # [1, 2, 3, 'Hello'] 

a = [1,2,3] 
a.append([4,5,6])    # [1,2,3,[4,5,6]] 


# extend

- 뒤쪽에 리스트를 넣는 함수
- 리스트 확장
a = [1,2,3] 
a. extend([4,5,6])   # [1,2,3,4,5,6] 



# list 정렬 함수

- a.sort()  :리스트가 가지고 있는 함수
- sorted()  : 파이썬이 가지고 있는 함수

 


# a.sort()

result = a.sort()  
print(result)    # None  
print(a)     # [1, 3, 4, 6, 7, 8, 9]  -> 원본이 변경 -> 의미없음! 
print(a.sort())   # 이렇게 써줘야 함 



# sorted(a)

- a는 불변, result는 정렬된 결과 
a = [7,3,9,4,6,1,8] 
result = sorted(a) 
print(a)    # 원본 
print(result)   # 정렬된 값 



# 문자열 정렬

 

# 정렬의 기본(오름차순) - 문자일 경우 ASCII 코드표 따름 - 대문자 숫자 < 소문자 숫자  
a = ["Hello","kaka","World","haha"] 
a.sort() 
print(a)   #['Hello', 'World', 'haha', 'kaka'] 

a = ["홍길동","최길동","아이유","김연아","신사임당"] 
a.sort() 
print(a)  # ['김연아', '신사임당', '아이유', '최길동', '홍길동'] 


# reverse(): 순서를 역으로 변환

a = ["홍길동","최길동","아이유","김연아","신사임당"] 
a.reverse()   
print(a)    # ['신사임당', '김연아', '아이유', '최길동', '홍길동'] 


# 내림차순 할 경우

a.sort(reverse=True) 
print(a)      #['홍길동', '최길동', '아이유', '신사임당', '김연아'] 

print(sorted(a,reverse=True))  # ['홍길동', '최길동', '아이유', '신사임당', '김연아'] 



# a.index(value) : list 내의 값 위치 찾기

a = [1,2,3,4,5] 
print(a.index(2))   # 1   # 2의 위치 찾아서 index 번호 알려줌 
print(a.index(4))   # 3   # 4의 위치 찾아서 index 번호 알려줌 

 


# a.insert(index number, val) : list에 값 삽입

a = [1,2,3,4,5] 
a.insert(0,"Hello")  # index 0 번에 Hello 넣을 것이다 -> 나머지 값 밀림 (대체가 아니라 삽입) 
print(a)     # ['Hello', 1, 2, 3, 4, 5] 



# a.remove(val) : 처음 나오는 값 1개 삭제

a = [1,2,3,4,5,1,2,3,4,5] 
a.remove(3) 
print(a)      # [1, 2, 4, 5, 1, 2, 3, 4, 5]   


# a.pop() : 지정한 요소 삭제

a = [1,2,3,4,5] 
print(a.pop())   # 5   # 맨 마지막 요소를 뜯어온다  
print(a)     # [1,2,3,4]   -> 5 삭제되어 있음 
print(a.pop(2))  # 3   # 지정한 index의 값을 뜯어옴 



# a.count(val): val이 a 안에 몇 개 있는지 

a=[1,2,3,4,5,1,2,1,3,4] 
print(a.count(1))    # 3  # 1이 몇 개 있는지 세라 



# == , is: 같은 변수인지 파악


a = 100 
id(a)    # 메모리 주소 (hash값)  # 1427553600 
a = [1,2,3] 
b = [1,2,3] 
print(a == b)     # True   # a와 b의 내용이 같은지 
print(a is b)     # False  # a와 b가 완전히 동일한 것인지 -> 주소 다름 

a = [1,2,3] 
b = a          # 주소를 복사한 것  
print(a is b)    # True 

b = a[:]        # a의 시작부터 끝까지 slicing해라  -> 새로운 것이 생성  
print(a is b)   # False  

 



2) tuple

- Sequence Type  
- list와 거의 동일 
- 표현하는 방식이 다름 
- list는 대괄호로 표현 []  
- tuple은 소괄호로 표현 (1,2,3)
a = ( )   # 비어있는 튜플 
print(type(a))    # <class 'tuple'> 

myList = [1]  # 가능. 요소가 1개인 리스트.  
print(type(myList))    # print(type(myList))     

myTuple = (1)  # 요소가 1개인 튜플은 불가능 
print(type(myTuple))  # <class 'int'> 

myTuple = (1,)   # 튜플임을 나타내기 위해 , 찍어주기  
print(type(myTuple))    # <class 'tuple'> 

# tuple은 list와 비슷! -> indexing, slicing 가능 
myTuple = (1,2,3) 
print(myTuple[0])   # 1 
print(myTuple[0:2])  # (1,2)   # 튜플에서 slicing하면 튜플 나온다 

# myTuple[0] = 100   # 에러 ! 튜플은 값을 바꿀 수 없음 ! 값을 얻어올 수는 있지만 바꿀 수는 없음.  

myTuple = (1,2,3) 
myTuple = 1,2,3    # 동치 -> 괄호 생략 가능. 이것도 튜플 

a,b,c = 10,20,30 
(a,b,c) = (10,20,30)  # 동치. a에 10, b에 20, c에 30 넣어라 
print(a)  #10  



# list와 tuple

 

a = [1,2,3]    # list 
b = tuple(a)    # list -> tuple 
c = list(b)   # tuple -> list 

 



3) sequence type : range 

 

range1 = range(10)   # 1부터 10까지 단조증가  
print(range1)    # range(0, 10) 
print(type(range1))  # <class 'range'> 

range2 = range(1,11,2)   # range(시작,끝(포함안됨),증감폭)  # [1,3,5,7,9]형태로 인식하면 됨 
print(range2)   
# 숫자 영역을 잡는 range는 일반적으로 for구문을 사용할 때 많이 이용 

 

Comments