'comprehension'에 해당되는 글 1건

  1. 2015.05.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)] # 에러 발생


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



Posted by 살레시오

댓글을 달아 주세요