알고리즘/Python

제너레이터 표현식

2024. 2. 12. 22:01
목차
  1. 제너레이터 표현식.
  2. Example.
  3. 회고

제너레이터 표현식.

제너레이터 표현식은 지능형 리스트의 느긋한 버전으로 리스트를 생성하는 대신, 필요에 따라 항목을 느긋하게 생성하는 제너레이터를 반환하므로 지능형 리스트가 리스트 팩토리라면, 제너레이터 표현식은 제너레이터 팩토리라고 생각할 수 있다. 

 

제너레이터 표현식은 제너레이터를 생성하고, 이 표현식을 사용하면 Sentence 클래스의 코드를 더 짧게 만들 수 있다. 

제너레이터 표현식은 파이썬에서 간결하게 제너레이터를 생성할 수 있는 방법 중 하나로, 반복 가능한 객체를 생성하는데 사용된다. 

제너레이터는 리스트 컴프리헨션과 유사하지만, 제너레이터 표현식은 결과를 한꺼번에 리스트에 저장하는 대신, 필요할 때 마다 값을 반환한다. 이는 메모리를 절약하고 효율적인 반복을 가능하게 한다. 

 


    
(expression for item in iterable if condition)

 

expression -> 각 항목에 대해 평가될 표현식이다.

item -> 반복 가능한 객체(iterable)에서 추출된 항목

iterable -> 반복 가능한 객체(리스트, 튜플, 집합 등)

condition -> 필터링 조건, 해당 조건이 True일 때만 표현식 평가 

 

제너레이터 표현식은 리스트 컴프리헨션과 유사하지만, 대괄호 '[]' 대신에 괄호 '()' 를 사용한다. 또한 제너레이터 표현식은 값들을 한꺼번에 리스트에 저장하지 않고, 필요할 때마다 값을 생성하므로 메모리를 효율적으로 사용할 수 있다. 

 

Example.


    
# 리스트 컴프리헨션
list_comp = [x ** 2 for x in range(5)] # [0, 1, 4, 9, 16]
# 제너레이터 표현식
gen_exp = (x ** 2 for x in range(5)) # 제너레이터 객체 생성
# 각 항목에 대한 제곱을 한꺼번에 리스트에 저장
print(list_comp) # 출력: [0, 1, 4, 9, 16]
# 필요할 때마다 값을 생성하여 사용
for value in gen_exp:
print(value) # 출력: 0, 1, 4, 9, 16

 

위의 예시에서, 리스트 컴프리헨션은 리스트를 한꺼번에 생성하지만, 제너레이터 표현식은 제너레이터 객체를 생성하여 필요할 때마다 값을 생성한다. 

 


회고

백준 [암호 만들기] 문제를 풀다가 코드를 간단하게 만들고자 찾아보던 중 제너레이터 표현식을 사용하면서 글을 정리하게 됐다. 

주어진 글자 조합으로 암호를 만드는 문제인데 적어도 모음 1 , 자음 2 이 포함되어야 하기때문에 모음수를 새기 위해서 

 


    
vowel_count = sum(1 for char in comb if char in vowels)

 

다음과 같이 제너레이터 표현식을 썼는데 우선 comb는 문자열이고 이 comb에서 모음의 갯수를 세어야 했다. vowels는 중복이 없는 집합(set)이고, comb안의 문자가 집합안에 속하는지를 확인하고, 속한다면 1을 반환해서 vowel_count에 1을 합하게 된다. 

 

이건 여담인데 , 처음에 받은 array 에서 sort를 안해줬더니 가차없이 틀렸다고 나왔다. 조합은 하나씩만 뽑으니까,, 일단 뽑아놓으면 알아서 자리 찾아갈줄,, ㅎ 작은 조건 하나하나 보는 버릇을 키워야겠다,,, 초중딩시절에도 이런 자잘자잘한거를 잘 놓쳐서 1번 틀리고 이랬는데,, 하아아ㅏ앙아아아아ㅏ 

'알고리즘 > Python' 카테고리의 다른 글

[python] 백준 2447 : 별 찍기 -10 (재귀)  (0) 2024.02.21
[python] 백준 4779 : 칸토어 집합 (재귀)  (0) 2024.02.19
[python] 백준 1541 : 잃어버린괄호 (그리디)  (0) 2024.02.15
[python] 백준 6603 : 로또 (combination, 백트랙킹)  (0) 2024.02.14
  1. 제너레이터 표현식.
  2. Example.
  3. 회고
'알고리즘/Python' 카테고리의 다른 글
  • [python] 백준 2447 : 별 찍기 -10 (재귀)
  • [python] 백준 4779 : 칸토어 집합 (재귀)
  • [python] 백준 1541 : 잃어버린괄호 (그리디)
  • [python] 백준 6603 : 로또 (combination, 백트랙킹)
0boss
0boss
Developer 공부 일지
영차0charBOSSDeveloper 공부 일지
0boss
영차0charBOSS
0boss
Total
Today
Yesterday
  • 분류 전체보기 (58)
    • SeSAC (21)
      • Git (0)
      • HTML (5)
      • CSS (4)
      • javascript (7)
    • Etc. (0)
    • Error (0)
    • CS (19)
      • 운영체제 (8)
      • 자료구조 (0)
      • 네트워크 (6)
    • 알고리즘 (7)
      • Python (5)
    • Java (3)
    • 우리FISA (0)
    • DB (1)
    • 클라우드 || 인프라 (0)
      • Docker (0)
      • Kubernetes (0)

최근 글

인기 글

hELLO · Designed By 정상우.
메뉴바
제너레이터 표현식
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.