Python

05. 제어문과 자료형의 조합

김야키 2017. 9. 18. 10:40

05. 제어문과 자료구조의 조합(Comprehensions)

리스트 형, 집합 형, 사전 형

 

1.     리스트 형

A.     비어있는 리스트에 데이터를 추가하는 과정을 반복 문을 이용하면 과정을 줄일 수 있다.

                       i.         리스트 선언 후 데이터 추가

>>> squares = []   #빈 리스트 생성

>>> for x in range(10):        #0~9까지 반복문 수행

              squares.append(x**2)

              #숫자의 제곱수를 리스트에 추가

 

             

>>> squares                      #리스트 값 확인

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 

                      ii.         리스트 선언과 동시에 데이터 추가

>>> new_squares = [y**2 for y in range(10)]      #리스트 선언

>>> new_squares               #리스트 값 추가 확인

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 

                     iii.         1번은 리스트가 선언 된 후에 데이터가 추가되지만 2번은 리스트가 선언과 동시에 데이터가 추가 된다.

                      iv.                   >>> x

9

>>> y

Traceback (most recent call last):

  File "<pyshell#19>", line 1, in <module>

    y

NameError: name 'y' is not defined

 

                      v.         1번 과정은 여전히 x의 값이 메모리 상에 존재해서 개발자가 전혀 의도하지 않은 코드에 의해 영향을 받아서 문제를 일으킬 수도 있다.

 

                     vi.         2번 예제는 리스트를 선언할 때에만 해당 변수가 사용되고 삭제가 되기 때문에 해당 명령문 후에는 메모리에 존재하지 않게 되어서 프로그램 성능 및 안정성, 가독성 측면에서 더 좋은 선택이다.


 

B.     2 for문의 사용

                       i.         1번 예제

>>> pairs = [ ]                   #빈 리스트 생성

>>> A=['blue', 'yellow', 'red']             #A리스트 선언

>>> B=['red', 'green', 'blue'] #B리스트 선언

>>> for a in A:                                #A리스트 순회

              for b in B:                          #B리스트 순회

                           if a != b:  #값 비교

                                        pairs.append((a,b))

                                        #서로 다른 쌍 추가

>>> pairs

[('blue', 'red'), ('blue', 'green'), ('yellow', 'red'), ('yellow', 'green'), ('yellow', 'blue'), ('red', 'green'), ('red', 'blue')]

 

                      ii.         2번 예제 (A리스트와 B리스트는 공유한다)

>>> new_pairs = [(a, b) for a in A for b in B if a !=b]       #선언

>>> new_pairs

[('blue', 'red'), ('blue', 'green'), ('yellow', 'red'), ('yellow', 'green'), ('yellow', 'blue'), ('red', 'green'), ('red', 'blue')]

 

                     iii.         1번 예제와 2번 예제를 비교하자면 확실히 입력하는 량이 줄어든 것을 알 수 있다.

                     iv.         2번 예제를 설명하자면 붉은색인 for문이 먼저 실행 되고 그 후에 하늘색의 for문이 실행된다. 그 후에 값을 비교하는 if문이 실행되고 값이 참이면 해당하는 a b의 값을 리스트에 추가하게 된다.

 

                      v.         for a in A for b in B if a != b new_pairs = [(a, b)]의 작업 순서

 

                     vi.         데이터형 선언 시 항목에 사용하는 튜플 선언에는 중괄호를 반드시 사용해야 한다.

>>> AA = [x, x**2 for x in range(6)]   #튜플 소괄호 추가 수정 전

SyntaxError: invalid syntax

 

>>> AA = [(x, x**2) for x in range(6)] #튜플 소괄호 추가 수정 후

>>> AA

[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]


 

2.     집합 형

A.     집합 형 이기 때문에 중괄호를 사용하는 것 이외에는 똑같다.

B.     집합 형은 앞서 말했듯이 중복을 허용하지 않도록 저장한다.

                       i.         소스 코드

>>> a = {x for x in 'abracadabra' if x not in 'abc'}

>>> a

{'d', 'r'}

 

                      ii.         for문에서는 ‘abracadabra’라는 문자 하나씩 x에 대입을 해준다

                     iii.         if문 에서는 x의 문자 값이 ‘abc’중에 속한 것 인가를 판단해서 x‘abc’가 아니라면 a집합에 추가한다.

 

3.     사전 형

A.     키와 값의 쌍이 기술되어야 하니 반드시 콜론( : ) 기호가 사이에 있는 :의 형태의 포맷이 서두에 표기될 수 있도록 해야 한다.

                       i.         소스 코드

>>> {x : x**2 for x in (2, 4, 6)}

{2: 4, 4: 16, 6: 36}

 

'Python' 카테고리의 다른 글

07. 함수 정의하기  (0) 2017.09.27
06. 실습 프로젝트  (0) 2017.09.27
04. 제어문  (0) 2017.09.14
03. 튜플형, 세트형, 사전형  (0) 2017.09.09
02. 문자열, 리스트  (0) 2017.09.04