brunch

You can make anything
by writing

C.S.Lewis

by 아무나 Jul 24. 2019

Python - 8. Data structure

*Udacity - Intro to Computer Science 를 따라가고 있습니다.

https://classroom.udacity.com/courses/cs101





1. Data structure - 데이터 구조


Udacity에서 컴퓨터 사이언스 과목을 공부하면서 큰 강의 레슨과 몇 차례의 연습문제 레슨을 겪으며 이것이 몇 가지 파트로 나뉘어 있다는 것을 이제야 깨닫게 되었다. 첫 번째 파트에서는 간단한 웹 크롤러 제작, 두 번째 파트에서는 프로시저(def로 시작하는 것들), 그리고 이제 시작할 세 번째 파트에서는 데이터 구조(data structure)에 대해 공부하게 된다.






2. 데이터 구조를 이루는 리스트에 대해 알아보자


스트링'string'은 활자('character')로 이루어진 것이다. 사람이 인식하기는 좋으나 컴퓨터가 인식하기에는 영 별로다. 그에 비해 리스트는 아무거로나 다 이루어질 수 있다. (숫자, 문자 심지어 또 다른 리스트로도) 한마디로 유연한 표나, 칸과 같다고 이해하면 더 쉽다. 예를 들어보자 '스트링'은 작은 따옴표 안에 들어있는 말뭉치다. 


s= 'yabba!'

s[0] = 'y'

s[2:4] = 'bb' //이렇게 뭉탱이로 나온다


그에 비해 list는 언제든지 꺼내 쓰기 좋게 칸 별로 분리되어 있다.


p=[y, a, b, b, a, !]

p[0] = 'y'

p[2:4] = ['b','b']


따라서 리스트란 [대,괄,호]안에 들어 있는 ,(콤마, 쉼표)로 나눠진 요소들로 이루어진 것이라 볼 수 있다. 아무것도 안들어 있는 리스트를 만들 수도 있고[] 1개만들어 있는 것도 만들 수 있다 [1] 처럼.





3. 연습해보자 - 월별 날짜 불러오기


월별로 며칠이 있는지 리스트에 주르륵 쓴 다음 월을 입력하면 해당 월이 며칠까지 있는지 보여주도록 하는 코드를 짤 수 있다.


>>>30





4. 리스트가 강력한 이유1- 리스트 안에 리스트 : Nested Lists 구조화된 리스트 가능


리스트에는 리스트를 넣을 수 있다. 바로 아래처럼!


[a, b, [c, d, [e, f]]]


같은 것들... 하지만 이런 게 어디 쓸데가 있냐는 사람들을 위해 준비했다. 짜잔-


beatles [['John',1940], ['paul', 1942]]


이렇게 비틀스 리스트에 멤버의 이름과 탄생년을 넣어 리스트로 만들어 놓을 수 있다. 이렇게 분류해서 구조화된 리스트는 훗날 강력한 효과를 발휘한다. 이런 리스트를 불러올 때는 이런 방법이 있다.


print beatles[1] //단순히 요소를 불러오고 싶다면

>>>['paul', 1942]

print beatles[1][1] // 요소 안의 요소를 불러오고 싶다면 [대][괄호]를 연속해서 쓰면 된다.

>>>1942





5. 리스트가 강력한 이유2 - mutation 형태 변화의 유연성


리스트가 강력한 이유는 하나 더 있다. 스트링은 한 번 만들면 바꿀 수 없지만, 리스트는 얼마든지 바꿀 수 있다는 점이다.


s='Hello'

s='Yello'


s, 즉, 스트링에서 헬로를 옐로로 바꾸려면 다시 정의하는 수밖에 없다. 우리가 하려는 것은 겨우 첫 글자를 바꾸는 것인데 처음부터 다시 정의를 해야 한다는 뜻이다. 하지만, 리스트는 경우가 다르다


p = ['H', 'e', 'l', 'l', 'o']

p[0] = 'Y' // 0번째 위치에 있는걸 Y로 바꿔

>>> p = ['Y', 'e', 'l', 'l', 'o'] 


이렇게, 첫 번째 위치에 있는 것을 Y로 바꾸라고 하면, Y로 쉽게 바꿀 수 있다. 다시 리스트를 정의할 필요가 없는 것이다.





6. 리스트가 강력한 이유3 - 별명 짓기 Aliasing


같은 리스트에 대하여 다른 이름을 가질 수 있다. 이를테면 다니엘 크레이그는 007 스펙터라는 영화에서 007이라는 이름으로 불리면서, 제임스 본드라고도 불린다. 둘 다 한 사람을 지칭한다. 그렇기 때문에 본질인 그 인물이 부상당하면  007도, 제임스 본드도 모두 부상당한 그 인물을 지칭하는 것이다. 리스트도 마찬가지다.



6-1. 연습해보자 - 007 다음 요원 소환


여태까지 배운 것들을 사용해 replace_spy라는 프로시저를 만들어 007 대신 008을 소환해볼 수 있다. 내가 짠 코드는 이러하다



후일의 나를 위해 메모해 놓고 간다. 분명 이것을 응용한 엄청난 문제가 뒤에서 기다릴 것 같은 기분이 든다.




7. 리스트가 강력한 이유4 -데이터 추가 가능


리스트 뒤에 계속해서 데이터를 추가해나갈 수 있다. 바로 append를 통해!

<list>.append(<element>)

이걸 통해 새로운 리스트를 재정의하지 않고도 기존 리스트를 계속 업데이트해나갈 수 있다.




8. 리스트 합치기, 길이 재기 - <list> + <list> / len(<list>)


단순하게 +로 <list> + <list> 가 가능하다.

[0, 1] + [2, 3] = [0, 1, 2, 3]


len으로 리스트의 길이를 잴 수도 있다 (length의 줄임말) = len(<list>)


len([0,1]) 

>>>2

len(['a',['b',['c']]]) 

>>>2


len은 리스트는 가장 밖에 있는 오리지널 리스트의 값만 계산한다. 사실 len은 스트링도 세어주는 착한 친구다.


len('good') 

>>>4




다음 시간에는 이전 시간에 배웠던 loop나 if와 지금 배운 강력한 list가 합쳐지면 어떤 시너지가 일어나는지 배우게 될 것이다. 그러니 설레는 마음으로 다음 시간에 보자.

매거진의 이전글 Python - 7. 좌절의 시간
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari