<출처> http://felixblog.tistory.com/54
<출처> http://psychoria.tistory.com/529 (deep copy 참고 부분)
파이썬의 자료 구조
Python 에서는 배열을 기본 자료형으로 사용하지 않고 List, Tuple, Set, Dictionary 네 가지 자료 구조를 기본 자료형으로 사용 합니다.
[참고] Java 는 배열(array)를 기본형으로 두고 List, Set 과 같은 자료구조는 util package에서 import 하여 사용 합니다. 배열은 크기가 고정되어 있고 동일한 자료형만을 담을 수 있다는 특징이 있습니다. C, Javascript 언어에서도 기본 자료형은 배열이고, 배열을 활용하여 여러 가지 자료구조를 만들게 됩니다.
List
List 는 여러 가지 자료형을 담을 수 있고, append, remove 등의 메소드를 통해 length 도 조절할 수 있습니다. 역시 쉽네요!
myList = ['a','b','c','d','e']
print(myList[0]) # "문자 a" 출력.
print(myList[-2]) # 뒤에서 두번째 요소인 "문자 d" 출력.
print(myList[1:3]) # 리스트 ['b', 'c'] 출력. b는 포함되지만, d 는 포함 안됨.
print(myList[:3]) # 0~2 번째 요소를 출력.
print(myList[-2:]) # 뒤에서 두번째부터 출력.
print(myList[:]) # 전체 출력.
Shallow copy, Deep copy
myList2 = myList # Shallow copy(주소값만 복사)
myList2 = myList[:] # Shallow copy(내용 전체 복사)
myList2 = copy(myList) # Shallow copy(내용 전체 복사)
재귀적으로 내부 내용을 복사하는 deepcopy() 함수는 따로 제공 됩니다.
[참고] list 안의 list는 정상적인 깊은 복사가 안 되는 문제가 발생
그래서 파이썬의 copy에는 deepcopy()라는 메소드가 지원됩니다.
deepcopy를 사용하기 위해서는 copy 라이브러리를 먼저 import하고 사용할 수 있습니다.
|
import copy myList1 = [ 1 , 2 , [ 3 , 4 ], 5 ] myList2 = copy.deepcopy(myList1) print ( hex ( id (myList1))) print ( hex ( id (myList2))) print ( hex ( id (myList1[ 2 ]))) print ( hex ( id (myList2[ 2 ]))) |
이렇게 deepcopy()를 사용해서 파이썬의 깊은 복사를 사용할 수 있습니다.
--------------------------------------------------------------------------------------------------
List 함수에는 append, extend, sort, reverse, index, remove, pop, count 등이 있습니다.
특정 값이 있는지 조사할 때는 in 을 사용 합니다.
myList = ['a','b','c','d','e']
print('d' in myList) # True
print('z' in myList) # False
append VS extend // del VS remove
myList = ['a','b','c']
myList2 = myList[:]
myList2.append(['x','y']) # ['a','b','c',['x','y']]. 마지막 요소 자리에 리스트가 들어간다.
print(myList2)
myList2 = myList[:]
myList2.extend(['x','y']) # ['a','b','c','x','y']. 리스트가 확장된다.
print(myList2)
myList2 = myList[:]
del myList2[0] # index 가 0 인 'a' 를 삭제.
print(myList2)
myList2.remove(0) # '0' 을 찾아서 삭제. 여기서는 0이 없으므로 ValueError 발생.
조건식을 사용하여 새로운 리스트를 만들 수도 있습니다.
myList = [1,2,3,4,5]
myList2 = [i*2 for i in myList if i>3]
print(myList) # [1,2,3,4,5]
print(myList2) # [8, 10]
내장함수 filter, map, zip 을 이용하여 새로운 리스트를 만들 수도 있습니다.
myList = [1,2,3,4,5]
print(myList) # [1,2,3,4,5]
def f(i):
if(i<4) : return True
else : return False
myList2 = list(filter(f, myList)) # 전달된 함수 f 로 myList 를 필터링한다.
print(myList2) # [1,2,3]
def g(i):
if(i<3) : return i*10
else : return i
myList3 = list(map(g, myList)) # 전달된 함수 g 로 myList2 를 매핑한다.
print(myList3) # [10,20,3,4,5]
myList4 = list(zip(myList, myList2, myList3)) # 3개의 lists 를 Tuple 로 묶는다.
print(myList4) # [ (1,1,10) , (2,2,20) , (3,3,3) ]
Tuple
Tuple은 List 와 달리 [] 가 아닌 () 로 둘러싸서 표현 합니다. 활용 방법이나 함수는 List 와 유사하나, 값을 변경할 수 없습니다.
Set
집합은 {} 로 둘러싸서 표현 합니다. 집합은 중복된 요소를 허락하지 않고, 임의의 순서를 가집니다.
mySet = {'a', 'b', 'c', 'a'}
print(mySet)
### 문자열을 List, Tuple, Set 자료형으로 만들기 ###
mySet = list('abca')
print(mySet) # ['a', 'b', 'c', 'a'] 출력
mySet = tuple('abca')
print(mySet) # ('a', 'b', 'c', 'a') 출력
mySet = set('abca')
print(mySet) # {'a', 'c', 'b'} 출력(순서는 그때그때 달라짐)
빈 집합을 만들 때에는 {} 가 아니라 set() 라고 선언해 줘야 합니다. {} 는 dictionary 자료구조를 만듭니다.
Dictionary
Hashtable 입니다. 집합과 같이 {} 로 둘러싸서 표현하나, {key1:value1, key1:value1, ...} 형태로 각 요소가 '키:값' 쌍을 이루고 있습니다. 집합과 마찬가지로 임의의 순서를 가집니다.
Dictionary 함수에는 keys, values, items, clear, get, in 등이 있습니다.
아래에서는 함수를 순환하면서 k(key) 와 v(value) 를 출력 합니다. k, v 변수명은 바꿔도 상관 없습니다. items() 함수를 사용했음을 기억해 두세요. 집합과 같이, k,v 의 출력 순서가 임의로 결정되는 것을 볼 수 있습니다.
myDic = {'name':'철수', 'age':24, 'grade':'빵점!'}
for k,v in myDic.items():
print(k,v)
<이상>
'Python 기초' 카테고리의 다른 글
파이썬 터틀 그래픽 예제 1 (0) | 2016.12.30 |
---|---|
파이썬 내장 함수 (0) | 2016.12.29 |
파이썬 로또 번호 자동 생성 예제 (0) | 2016.12.26 |
파이썬 구구단 출력 예제 (0) | 2016.12.26 |
파이썬 빠른 피보나치 수열 구하기 (0) | 2016.12.21 |