파이썬 중급 4일차(2)

김영목·2021년 8월 2일
0

파이썬중급

목록 보기
8/18

2교시 : 제너레이터와 array에 대한 이해

지능형리스트의 대표적인 형태

변수 = [str(n) for n in ()] 왼쪽과 같은 형태와 비슷하지만 조금은 다른 형태로 사용되는 것이 있는 데 그것이 바로 generator이다.

그렇다면 지능형 리스트와 같이 자료형을 만드는 좋은 방법이 있음에도 왜? generator를 사용하는 것일까? 그것은 조금이라도 메모리를 효율적으로 쓰고자 함에 있다.

우리가 사용하는 지능형리스트의 경우 변수와 요소 그리고 그 요소를 만드는 함수 등을 정해서 실행시키면 자동적으로 해당 리스트가 완성이 되어 메모리를 점유하게 된다.

하지만 generator의 경우 해당 코드를 완성하고 next(변수)로 실행시켜야만 해당 요소가 하나씩 등장하는 특징으로 인해 메모리 효율성이 높아지게 된다.

백문이불여일견 한번 시작해보자.


char = '%$^@#!><?'

지능형리스트로 리스트화 시켜보기

intelligence1 = [ord(i) for i in char ]

generator1 =  (ord(i) for i in char)

여기서 print시켜보면 다른 점이 보인다.

print(intelligence1) 를 하면 리스트 형태로 된 숫자들이 나온다.

하지만 generator로 만든 경우 print(next(generator1))으로 출력해야 각 요소가 1개씩 나오게 된다.

이번에는 array를 만들어 보자. 아래와 같이 변수와 인자 그리고 이니셜라이즈를 입력하고 print로 출력하면 다음과 같은 화면이 나온다.
array1 = ('i' , (ord(s) for s in char))

print(array1) = array(i, [~~])
print(array1.tolist()) = [~~~]


마지막으로 list형태 사용시 주의할점...

a = [[~]*5 for s in range(1,5)]
b = [[~]*5]*5

print(a)
print(b)를 해보면 a,b에 대해서 차이점을 알 수 없다.
하지만 조금 더 들어가서 

a[0][1] = !
b[0][1] = !로 바꾸게 되면 차이점이 명확히 들어난다.

a의 경우 0번째 리스트 안에 있는 1번째 원소가 !로 바뀌지만 b의경우 모든 리스트의 1번째 원소가 !바뀌게 된다. 

이렇게 되는 이유는 a와 b리스트 안에 있는 원소들의 아이디 값 구성때문이다. 
profile
안녕하세요 김영목입니다.

0개의 댓글