리스트라는 말을 들어본 적이 있을거다.
버킷리스트 50가지 (죽기 전에 해야할 50가지) 같은 말이 있다. 우리말로는 목록이라고 할 수 있겠다.
영어로 리스트라고 하니 괜히 어려워 보인다. 리스트는 목적에 맞도록 모아놓은 자료들의 묶음 정도로 해석할 수 있다. 수학의 집합처럼 사용할 수도 있고, 배열의 특성도 있다.
파이썬의 리스트는 숫자와 문자열들을 자유자재로 다루기 위해서 필요하다. 기본 자료형과 참조 자료형(클래스)를 사용하는 C나 자바들과는 분명한 차이가 있다.
백문이 불여일견, 백견이 불여일타. 파이썬은 키보드를 많이 두드려 봐야 한다.
리스트와 변수의 기본적인 차이점은 아래 그림과 같다. 변수가 한개의 값만 저장할 수 있는데 비해 리스트는 저장 공간이 여러개가 있다.
기본 문법은 아래와 같다. [ ] 숫자들을 콤마 , 로 구분하여 각괄호를 써서 감싸준다.
a = [1,2,3,4,5,6,7,8,9,10]
print(a)
a 라는 리스트에 1부터 10까지의 정수형 요소를 저장했다.
아래 코드와 같이 다양한 형태의 리스트를 만들 수 있다.
a = [] # 비어있는 리스트
b = [1,3,5] # 정수리스트
c = [2,4,6,1.5,3.0,4.5] #정수와 실수리스트
d = ['what','a','Good','day!'] # 문자열리스트
e = [1,3,'Hello',"World"] # 혼합형리스트
f = [1,2,3,4,[5,6,7,8]] # 중첩리스트
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
리스트는 정수와 실수를 혼합해서 만들 수도 있고, 문자열과 숫자형을 섞을 수도 있다. 또한 리스트 안에 리스트를 중첩시킬 수도 있다. 리스트는 매우 자유도가 높다. 그만큼 응용을 하려면 내용이 방대하다. 이 포스트는 입문자들을 대상으로 만들었기 때문에 초기에 리스트의 모든 것을 다루지는 않는다.
입문과정의 처음부터 너무 힘을 주면 파이썬에 흥미를 잃을 사람도 있을 것이다. 이렇게 재미있는 파이썬조차 재미없게 만들어 버리면 안된다. 철저하게 배운다는 자세는 좋지만 학습의 효율이 떨어진다. 컴퓨터 구조나 자료구조 이런 내용에 대해 깊이 알고 싶다면 파이썬이 아니라 C와 어셈블리어를 배워야 한다. 오픈소스월드의 최강자, 리눅스의 창시자 리누즈 토발즈는 C야 말로 컴퓨터 하드웨어에 가장 근접한 언어라고 이야기한다.
리스트의 기본을 갖추고 코드를 작성하다보면, 리스트의 다양한 기능들을 사용할 수 있게 된다.
리스트의 요소는 여러개이다. 요소가 여러개라도 결국 값을 하나씩 꺼내서 사용해야 한다. 접근하는 법은 C언어의 배열과 비슷하다. 다음 예제를 보자.
a 리스트의 요소에 접근하기 위해서는 a[인덱스] 를 사용한다. 인덱스는 0부터 시작해서 n-1에서 끝난다. 만약 인덱스를 벗어나면 out of range 오류에 걸린다. 즉 첫번째 요소는 인덱스 0 다섯번째 요소는 인덱스 4로 n-1 의 관계가 된다.
인덱스와 실제 값의 관계는 참조가 실제 값을 가리키고 있는 것과 같다. 손가락을 생각해보자. 인덱스는 값을 가리키고 있는 손가락이다.
값을 지정할 수 있으니까 아래처럼 연산이 가능해진다.
거꾸로도 인덱스를 지정할 수 있다. -1이 가장 나중 순서로 처음으로 돌아올 수 있다. 이것도 인덱스 범위를 벗어나면 out of range 오류가 난다.
중첩 리스트의 경우 아래와 같이 접근할 수 있다. a[3] 의 요소가 [4,5,6] 이라면 a[3][0] 은 4가 되는 것이다.
아래 내용처럼 연결되있다. 배열의 요소는 숫자나 문자열 둘 다 가능하다.
리스트를 삼중으로 중첩하는 것도 가능하다. 그런데 너무 복잡하게 만들면 코드를 보는 사람들이 오히려 혼란스러울 수가 있다.
* 리스트 슬라이싱
리스트 슬라이싱은 리스트를 부분으로 자르는 것이다.
a[0:2] 는 a[0], a[1] 을 자른다. a[0] 인덱스에서 두번째 값까지 자른다.
a[0:] 으로 자를 수도 있다. a[0] 이상의 모든 요소를 자른다.
반대로 내려올때는 인덱스에 +1을 한다. 시작 인덱스와 끝 인덱스에 차이가 있다는 점에 주의한다.
중첩된 리스트에서 슬라이싱 할 시에는 a[1][2:] 이렇게 규칙은 똑같다.
리스트 연산은 더하기와 곱셈이 있다.
- 리스트 더하기
덧셈은 말 그대로 두 리스트를 합친다. 두 리스트를 합쳐도 원래 리스트는 변하지 않는다. 새로운 리스트를 생성해서 합친 리스트를 대입해야 한다.
- 리스트 곱셈(반복)
문자열 "Hello" * 3 이 HelloHelloHello 가 되는 것 처럼 리스트 반복이 이루어진다.
이번 포스트는 파이썬의 기본적인 리스트 사용법을 알아 봤다. 사용법이 다양한 만큼 복잡하기 때문에 한번에 기능을 다 알려고 할 필요는 없다. 아직 파이썬의 인터프리터에 익숙해지지 않았다면 손에 익숙하도록 연습을 할 필요는 있다. 아직 파이썬의 재미있는 부분은 아니지만 다음 단계로 가려면 익숙해질 필요는 있다. 운동이나 예술이나 뭔가 배운다는 것은 그렇다. 처음에는 좀 지루한 초보시절이 있다. 그리고 그 시절은 금방 지나가버린다. 파이썬도 스포츠를 배운다고 생각하면 어렵지 않을 것이다. 나중에 가면 보상이 많다.