카테고리 없음

[Python] List Comprension_ 기본

standingR 2024. 3. 25. 18:40

1. 리스트 컴프리헨션(List Comprension)_ 기본 개념

1.개념 및 설명  :

 

리스트 컴프리헨션은 직관적으로 리스트를 생성하는 방법입니다. 대괄호 "[", "]"로 감싸고 내부에 for문과 if 문을 사용하여 반복하며 조건에 만족하는 것만 리스트로 생성할 수 있습니다.

 그냥 리스트를 생성하고 for문과 if문을 사용하면 되지 굳이 리스트 컴프리헨션을 사용할 필요가 있을지 궁금할 수 있습니다. 리스트 컴프리헨션을 사용하는 큰 이유는 직관적이고, 여러줄 쓸걸 한줄에 만들어 주기 때문입니다. 심지어 속도도 더 빠릅니다.

출처 : https://bio-info.tistory.com/28

 

[Python의 꽃] 리스트 컴프리헨션(List Comprehension)

안녕하세요 이번엔 파이썬에서 간결하고 실용적이고, 직관적인 기능 "리스트 컴프리헨션" 을 알아보겠습니다. -목차- 1. 리스트 컴프리헨션(List Comprension)이란? 2. 기초 사용법 3. 응용 1) 수식이나

bio-info.tistory.com

 

단점 : 너무 중첩해서 사용하면 오히려 복잡함!!!

# 적당한 복잡도 일 떄 사용한다!!
# 기능 : 값을 돌려가면서 (for문), 원하는 값들을 모으는 역할 (리스트처럼)

기본형식 : [ 모을값 for i in a]

 

 

예시 코드 

 

적용전 코드

# 예시
b = []
for i in a:
    #print(i)
    b.append(i)
b

출력값 : 
['a', 'b', 'd', 'e', 'f', 'g', 'c']

 

List Comprension

 

[i for i in a]

출력값 : ['a', 'b', 'd', 'e', 'f', 'g', 'c']

 

 

 

 

2. 실제 사용 및 적용 

 

1. List  Comprension _ 조건식으로 필터링 

# for + if 같이 사용해서 원하는 조건에 맞는 친구들만 모을 수 있음!!
# 필터링을 쉽게 구현
# 코드 구조상 for ~~~~ if ~~~ 값들을 모은다/ 출력 ~~~~ 리스트 컴프리핸ㅕㄴ
# =====> 코드의 구조적인 부분의 유사성으로 눈으로 체크
b = []
for i in a:
    if i != "c": # 필터링의 역할
      b.append(i)
    else : # 원소의 값의 값이 c인경우
        pass
print(b)

['a', 'b', 'd', 'e', 'f', 'g']
[i for i in a if i != "c"]

출력값 : ['a', 'b', 'd', 'e', 'f', 'g']

 

위의 예시에서 볼 수있듯이 코드 구조상 [for ~~~~ if ~~~ 값들을 모은다/ 출력 ~~~~] 의 한줄의 코드로 매우 쉽게 필터링이 됨.

 

 

- 참고 : enmerate의 사용

# 참고) 위에 있던 a리스트에서...
# a의 홀수번쨰 위치한 값들에 대해서만 "h"라는 문자를 붙여서 ... 모아 보세요
# 1줄의 리스트 컴프리핸션으로 해보세요
# 위치가 홀수/ 짝수 판별 : 몇번쨰 인지 정수인덱스에 ...
# 모을려는 대상은 개별원소의 값 + h : 값 자체도 필요
# 필요한 정보 : 정수 인덱스 & 값 자체도 필요 ===> enumerate()

 

[i for i in enumerate(a) if a[0] != "c"]

[(0, 'a'), (1, 'b'), (2, 'd'), (3, 'e'), (4, 'f'), (5, 'g'), (6, 'c')]

 

 

 

활용 에시) 

# 시도 1)  그냥 정수 인덱스만 사용해서
a = ["a", "b", "c","d", "e", "f","g", "c", "i"]

for i in range(len(a)):
    #print(i)
    if i & 2 == 0:
        b.append(a[i]+"h")
b

 

# 내가 모을 대상 /
[a[i]+"h" for i in range(len(a)) if i % 2==0]

['ah', 'ch', 'eh', 'gh', 'ih']

 

# 시도 2) enumerate 이용해서
# 위치가 짝/ 홀수냐
[v+"h" for i,v in enumerate(a) if i % 2 ==0]

['ah', 'ch', 'eh', 'gh', 'ih']

 

 

 

# 참고 질문 사항 --> 짝수일 떄는 e를 더하고, 홀수일떄는 o를 더하자
# case by case로 할떄

for i,v in enumerate(a):
    if i % 2 ==0:
        print(v+"h")
        
[0, 2, 4, 6, 8]
[i for i,v in enumerate(a) if i % 2 ==0]

 

 

중요 내용 한눈에 정리 

 

## 중요 !!!

# 리스트 컴프리핸션 : for ~~~~ if ~~~ print/append() ====>
#             그냥 돌릴떄 [모을대상 for ~~~~ if ~~~~~~]
#             특정 조건에 대한 필터링 [모을 대상 for ~~~~ if ~~~~]
#             이럴 떄 저럴때 각기  처리 ['if 모을값' 'if 조건 else' else일떄 모을깞' for~~~~~]
# + 참고) 내가 만든 함수 등등 ...




# 주로 사용되는 역할 : 필터링 !!!! (복제.....)
# +++ enumerate, dictionary의 .items(), etc 같이 사용해서 쓸 수 있음!!!!
# +++ 모을 대상이 하나가 아니라 여러개돈 가능함 !!! ===> 코테에서 정렬
# +++ 모을 대상에 대한 변경을 통한 수집도 가능 : v + "h"