2015년 5월 25일 월요일

파이썬의 리스트(list) 생성

 리스트는 여러 개의 객체를 하나로 묶는 데이터 형이다. (엄밀히 말하면 mutable sequence 형임) 기본적으로 대괄호 [..]를 이용하여 묶고자 하는 데이터들을 콤마(,)로 구별하여 나열한다. 보통은 같은 형의 데이터를 묶어서 많이 사용하지만 리스트의 요소는 서로 다른 데이터 형일 수 있다.

>>> la = [11, 22, 33] # 리스트를 생성하여 la 에 저장한다.
>>> lb = [‘life’, ‘is’, ‘short’] # 문자열의 리스트
>>> lc = [True, ‘hi’, 33.4, 2-3j]
>>> ld = [] # empty list를 생성하여 lc에 저장

이 예제와 같이 리스트의 요소는 어떠한 자료형이라도 가능하다. 리스트 안에 리스트가 오는 것도 얼마든지 가능하다.

>>> le = [ [11,22], [33, 44, 55] ]

이것을 중첩된 리스트라고 한다.

리스트를 만드는 또 다른 방법은 list comprehension 을 이용하는 것이다. 예를 들어서 제곱 수의 리스트틀 만든다고 가정하자. 다음과 같이 for 문을 이용할 수 도 있을 것이다.

>>> squares = []
>>> for x in range(10):
...    squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

하지만 이 방법은 변수 x가 생성되고 for 문이 종료된 후에도 변수 x 가 메모리에 남아 있게 된다. 좀 더 깔끔한 방법은 다음과 같이 map()과 익명 함수를 이용하는 것이다.

>>> squares = list(map(lambda x: x**2, range(10)))

이것과 완전히 동일한 방법이 바로 다음과같은 list comprehension 이고 훨씬 더 간결하고 가독성이 높다.

>>> squares = [x**2 for x in range(10)]

일반적으로 다음과 같이 구성된다.

[ 표현식 for문 (for 문 | if 문)* ]

예를 들어서 두 리스트 요소 중 다른 것들로만 조합하는 리스트는 다음과 같다.

>>> [(x,y) for x in [1,2,3] for y in [3,1,4] if x!=y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

이것은 다음 프로그램과 동일한 동작을 수행한다.

>>> combs = []
>>> for x in [1,2,3]:
...    for y in [3,1,4]:
...        if x != y:
...            combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

두 가지 경우에서 for 문과 if 문의 순서가 같다는 것을 알 수 있다.
표현식이 튜플일 경우 반드시 괄호로 묶어야 한다.

>>> [(x,x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

만약 다음과 같이 괄호를 생략하면 에러가 발생한다.

>>> [ x,x**2  for x in range(6)] # 에러 발생

여기서 소개한 내용이 리스트를 생성하는 기본적인 방법들이다.


댓글 없음:

댓글 쓰기