[python] 제어문 컴프리헨션 02. 컴프리헨션 + TODO 문제(08.16)

0

컴프리헨션(Comprehension)

  • 제어문으로 간단하게 iterable의 원소를 생성하여 새로운 자료구조(List, Dictionary, Set)을 생성하는 구문
  • 종류
    1) {K : v for in 문} => 딕셔너리 컴프리헨션
    2) {value for in 문} => 셋 컴프리헨션
    3) [value for in 문] => 리스트 컴프리헨션
    튜플 컴프리헨션은 x
  • for in 반복문에 조건을 걸고 싶으면 뒤에 if문을 추가한다
l1 = [1,2,3,4,5,6,7,1,2,3,4,]
# l1의 원소들의 동일한 처리(10배)한 결과를 가지는 리스트를 생성.

results = [] #결과를 담을 리스트

for v in l1 :
    # print(v*10)
    results.append(v*10)
    
#위의 과정을 컴프리헨션으로 간단하게 표현가능


# 리스트 컴프리헨션 => for in 처리를 리스트안에 넣어준다.
results2 = [v*10 for v in l1]
results2

# set 컴프리헨션 -> set
results3 = {v*10 for v in l1} 
results3

# 딕셔너리 : key - 처리한 값의 index, value- 10배한 값
#{K : v for in 문} => 딕셔너리 컴프리헨션
#{value for in 문} => 셋 컴프리헨션
#[value for in 문] => 리스트 컴프리헨션
results4 = {index: value*10 for index, value in enumerate(l1)}
results4
# 리스트 컴프리헨션(조건 걸기)- 뒤에 if문 추가
r = [value for value in l1 if value%2 == 0]
#셋 컴프리헨션(조건 걸기)- 뒤에 if문 추가
r2 = {value for value in l1 if value%2 == 0 }
# 딕셔너리 컴프리헨션(조건 걸기)- 뒤에 if문 추가
r3 = {value : value for value in l1 if value%2 == 0 }
# 1 ~ 1000 사이의 10의 배수
[v for v in range(1,1001) if v % 10 == 0]

TODO 문제

#(8) 사용자로부터 정수를 입력받아 그 단의 구구단을 출력하시오. 
# ex) 단을 입력하시오 : 2  
# 2 x 1 = 2
# 2 x 2 = 4
#..
# 2 x 9 = 18

#컴프리헨션

lst = [1,2,3,4,5,6,7,8,9]
num = int(input("정수 :"))
[print(f"{num} x {i}") for i in range(10)]


#(10) 다음 리스트가 가진 값에 10배의 값을 가지는 값을 (원래값, 10배값) 의 튜플 묶음으로 가지는 리스트를 만드시오 (리스트 컴프리헨션 이용)
# Ex) [(10,100), (30,300), .., (35, 350)]
lst = [10, 30, 70, 5, 5, 120, 700, 1, 35, 35]

[ (lst[default],value*10) for default, value in enumerate(lst) ]


#(12) 다음 파일이름들을 담은 리스트에서 확장자가 exe인 파일만 골라서 새로운 리스트에 담으시오.(string의 endswith()함수 이용)
file_name=["test.txt", "a.exe", "jupyter.bat", "function.exe", "b.exe", "cat.jpg", "dog.png", "run.exe", "i.dll"]

[ f for f in file_name if f.endswith(".exe") ] 
profile
데이터 분석 & 서비스 기획

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

답글 달기

관련 채용 정보