본 글은 제가 Python 을 공부하며 알게 된 내용을 정리하기 위해 작성하였습니다. 생략된 부분이 많고, Python 의 특징을 다른 언어들과 비교하는 방식으로 기술하기도 하므로, 처음 프로그래밍을 접하는 분에게는 적합한 글이 아닐 수 있습니다.


체계적으로 Python 을 학습하고자 하는 분은 점프 투 파이썬 | 박응용 을 참고하기 바랍니다. 프로그래밍을 처음 접하는 사람들을 위해 쓴 책으로, 링크된 사이트에서 책의 내용 전부를 볼 수 있습니다. 현재 e-book 으로도 판매중입니다. 초보 학습자를 위한 강추 Python(Python) 링크 | 잉고래 의 링크도 도움이 될 것입니다.



다른 언어를 학습한 경험이 있는 분에게는 빠르게 활용하는 파이썬 3.2 프로그래밍 | 신호철, 우상정, 최동진을 권합니다. 풍부한 예제와 함께 중요 내용을 간결하게 담아낸 좋은 책입니다.


아래 내용의 출처는 위에서 소개한 두 권의 도서와, 파이썬 공식 홈페이지의 문서들 입니다.

파이썬의 자료 구조

Java 는 배열(array)를 기본형으로 두고 List, Set 과 같은 자료구조는 util package 에서 import 하여 사용 합니다. 배열은 크기가 고정되어 있고 동일한 자료형만을 담을 수 있다는 특징이 있습니다. C, Javascript 등의 언어에서도 기본 자료형은 배열이고, 배열을 활용하여 여러 가지 자료구조를 만들게 됩니다.


이와 달리 Python 에서는 배열을 기본 자료형으로 사용하지 않고 List, Tuple, Set, Dictionary 네 가지 자료 구조를 기본 자료형으로 사용 합니다.

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 함수에는 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)