[Python] List Comprension_ 기본
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"