파이썬 Comprehension

이찬·2023년 8월 7일
0

Python

목록 보기
1/17
post-thumbnail

Comprehension

다른 Sequence로 부터 새로운 Sequence (Iterable Object)를 만들 수 있는 기능

파이썬에서는 for문과 if문을 한 라인에 작성하여 코드를 직관적으로 만들고 실행속도를 높혀주는 기법인 리스트 내포(List comprehension)기법이 존재합니다.

표현식 for 항목1 in 반복 가능 객체 1 if 조건 1 # 반복문이 1회 실행될 때마다 표현식이 출력(저장)된다고 생각!
표현식 for 항목2 in 반복 가능 객체 2 if 조건 2

meter_list = [3, 7, 9, 10] 
centi_meter_list = [100*i for i in meter_list if i%2 != 0]코드를 입력하세요

리스트 내포를 활용한 이중 for문

result = [x * y for x in range(1, 10) for y in range(1, 10)]

1. list comprehension

[출력표현식 for 요소 in 입력Sequence [if 조건식]]

  • 입력 Sequence는 Iteration이 가능한 데이타 Sequence 혹은 컬렉션
  • [if 조건식] 에서 [ ] 은 리스트 괄호가 아니라, 옵션이라는 뜻, 즉 조건이 있을때만 넣으면 된다는 뜻임
# 예: 종류가 다른 데이터에서 정수 리스트만 가져오기
dataset = [4, True, 'Dave', 2.1, 3]
int_data = [num for num in dataset if type(num)==int]

int_data
# [4, 3]

print (type(int_data))
#<class 'list'>
# 출력 표현식을 num * num 으로 바꿔보기
int_square_data = [num * num for num in dataset if type(num)==int]

int_square_data
# [16, 9]

2. Set comprehension

{출력표현식 for 요소 in 입력Sequence [if 조건식]}

  • 입력 Sequence로부터 조건에 맞는 새로운 Set 컬렉션을 리턴
  • [if 조건식] 에서 [ ] 은 리스트 괄호가 아니라, 옵션이라는 뜻, 즉 조건이 있을때만 넣으면 된다는 뜻임
int_data = [1, 1, 2, 3, 3, 4]
# 예: num * num 의 set 컬렉션 만들기
square_data_set = {num * num for num in int_data}
square_data_set
# {9, 16}

3. Dictionary comprehension

{Key:Value for 요소 in 입력Sequence [if 조건식]}

  • 입력 Sequence로부터 조건에 맞는 새로운 Set 컬렉션을 리턴
  • [if 조건식] 에서 [ ] 은 리스트 괄호가 아니라, 옵션이라는 뜻, 즉 조건이 있을때만 넣으면 된다는 뜻임
id_name = {1: 'Dave', 2: 'David', 3: 'Anthony'}
id_name.items()
#dict_items([(1, 'Dave'), (2, 'David'), (3, 'Anthony')])
# 아이디가 1 초과인 데이터를 이름:아이디 형식으로 새로운 set 만들기
name_id = {val:key for key,val in id_name.items() if key > 1}
name_id
# {'Anthony': 3, 'David': 2}

# 아이디를 10단위로 한번에 바꾸기
name_id = {key * 10:val for key,val in id_name.items()}
name_id
# {10: 'Dave', 20: 'David', 30: 'Anthony'}
profile
Kyunghee univ. IE 21

1개의 댓글

comment-user-thumbnail
2023년 8월 7일

공감하며 읽었습니다. 좋은 글 감사드립니다.

답글 달기