본문 바로가기
Study/Python study

[Python(파이썬)]컴프리헨션(Comprehension), for문, if문 한 줄로 만들기

by 파크영 2022. 3. 11.
  • for문, if문
 

[Python] for문(반복문), if문(조건문)

for문(반복문) 명령이 반복 될 수 있게 하는 문법 특정 조건을 만족할 때까지 반복하는 while과 달리 원하는 횟수, 범위만큼 반복한다. for문 기본 구조 for [변수명] in [문자열, 리스트, 튜플] :  [반

young-library.tistory.com

 

컴프리헨션(Comprehension)

파이썬 컨테이너 자료형(리스트, 딕셔너리, 세트)에 데이터를 좀 더 쉽고 간결하게 담기 위한 문법

'반복문과 조건문을 결합하여 하나의 구문으로 만들어 담는 것'

리스트 컴프리헨션, 딕셔너리 컴프리헨션, 세트 컴프리헨션, 제너레이터 컴프리헨션이 있다. 

 

컴프리헨션 기본 구조

리스트 컴프리헨션 :  [반복 실행문 for 변수 in 순회 가능 객체(list, set, range() 등) +if문, for 사용 가능]
딕셔너리 컴프리헨션 : { 키 : 값 for 표현식 in 순회 가능 객체(list, set, range() 등) +if문, for 사용 가능}
세트 컴프리헨션 : { 반복 실행문 for 표현식 in 순회 가능 객체(list, set, range() 등 +if문, for 사용 가능}

장점

  • 간결하다.
  • for문보다 실행 속도가 빠르다. 

단점

  • 복잡하게 사용할 경우 가독성이 떨어진다. 따라서 복잡한 코드 경우 여러줄로 표시하는 것이 나을 때가 있다. 

 

 

리스트 컴프리헨션(List Comprehension)

리스트 안에 for문과 if문(조건문)을 한 줄에 넣어서 새로운 리스트를 만드는 것

 

 

빈 리스트에 숫자를 저장하는 3가지 방법을 보자

 

① 하나씩 대입(append)

>>> nlist = []	# 리스트 생성
>>> nlist.append(1)
>>> nlist.append(2)
>>> nlist.append(3)
>>> nlist.append(4)
>>> nlist.append(5)

# 출력
>>> nlist
[1, 2, 3, 4, 5]

하지만 이 경우는 1-5까지지만 추가해야할 데이터가 커질 수록 반복적인 문장을 계속 사용해야하는 비효율적인 코드가 된다. 따라서 for문(반복문)을 사용하면 리스트에 숫자를 append 하는 문장을 한 번만 작성할 수 있다. 

 

② for문 사용

>>> nlist = []	# 리스트 생성
>>> for i in range(1, 6):
	nlist.append(i)	# 리스트에 i 추가

# 출력
>>> nlist
[1, 2, 3, 4, 5]

 

③ 리스트 컴프리헨션 사용

리스트 생성(한 줄)부터 for문(두 줄)을 리스트 컴프리헨션을 사용하여 한 줄로 간단하게 리스트 생성할 수 있다. 

>>> nlist = [i for i in range(1,6)]

# 출력
>>> nlist
[1, 2, 3, 4, 5]

 

for문과 if문을 함께 사용할 때 컴프리헨션을 사용하는 예시는 아래 3번에 있다. 

 

1.  for문

 

for문 기본 구조

for [변수명] in [문자열, 리스트, 튜플] :
     [반복하여 실행할 명령]

 

  • 기본 구조 for문 예제
>>> nlist = []

>>> for i in range(5):
	nlist.append(i)
>>> nlist
[0, 1, 2, 3, 4]

 

  • 한 줄 for문 예제
>>> nlist = [i for i in range(5)]
>>> nlist
[0, 1, 2, 3, 4]

  • 이중 for문 예제
for i in range(1, 3):
	for j in range(1, 9):
		print(f'{i} * {j} = {i*j}')
        
# 출력
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16

 

 

  • 이중 for문 한 줄 예제
>>> m = [f'{i} * {j} = {i*j}' for i in range(1, 3) for j in range(1, 10)]

 

# m 출력
>>> print(*m, sep='\n')

# 출력
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16

 

 


 

 

2. if문

 

if-else문 기본 구조

if 조건식 :
    조건이 참인 경우 수행할 문장
else :   
# else는 생략 가능하다. 
   조건이 거짓인 경우 수행할 문장

 

  • 기존 if문
>>> a = 3
>>> if a == 3:
	print('참')
    
# 출력
참

 

  • 한 줄 if문
>>> a = 3
>>> if a == 3: print('참')

# 출력
참

 

 

 

  • 기존 if-else문
>>> a = 3

>>> if a == 5:
	print('참')
else :
	print('거짓')
    
# 출력
거짓

 

  • 한 줄 if-else
>>> a = 3

>>> print('참' if a == 5 else '거짓')
    
# 출력
거짓

 

 

조건식이 2개 이상인 경우

  • 기존 if문
nlist = [2, 4, 6, 8, 10, 12]

if 3 in nlist:
	print('3포함')
elif 4 in nlist:
	print('4포함')
else:
	print('모두 없음')
    
# 출력
4포함

 

 

  • 한 줄 if-elif-else문
nlist = [2, 4, 6, 8, 10, 12]
print('3포함' if 3 in nlist else '4포함' if 4 in nlist else '모두 없음')

# 출력
4포함

 


3. for문 + if문

 

  • 기존 for문 + if문
>>> a = ['a', 'b', 'ab', 'c', 'aa', 'bc']
>>> b = []

# a리스트에서 문자 'a'가 포함되어 있는 문자열만 b리스트에 추가
>>> for i in a:
	if 'a' in i:	
		b.append(i)

# 출력
>>> b
['a', 'ab', 'aa']

 

  • 리스트 컴프리헨션(for문 + if문)
>>> a = ['a', 'b', 'ab', 'c', 'aa', 'bc']
>>> b = [i for i in a if 'a' in i]	# 리스트 컴프리헨션(for문 + if문)

# 출력
>>> b
['a', 'ab', 'aa']

 

 

댓글