리스트 컴프리헨션

 

 

 

리스트 내포라고 불리는

구문인데

 

 

 

자주 또 많이 사용되는 코드를

보다 쉽고 간단히 입력할 수 있도록

고안된 작성법을 일컫는 말이다.

 

 

 

 

예제를 보자.

 

 

 

 

 

 

 

 

 

 

위 4줄 코드를 한 줄로 축약하여

작성하게 되는 예인데 출력값이 동일하다.

 

 

 

i * i를 값으로 사용할 건데 이 값은

다음에 오는 for 반복문을 돌렸을 때

나오는 값이라는 뜻.

 

 

 

이게 바로 리스트 내포라는 기능이다.

 

 

 

 


 

 

 

 

 

조건문 사용 예제

 

 

 

 

 

 

 

 

 

 

i를 열 번 반복을 돌리는데

i를 2로 나눈 나머지가 0인 것만

출력해 주면 좋겠다는 코드

 

 

 

 


 

 

 

 

 

*진수 변환 코드

 

 

 

 

format 함수를 사용할 때 (:b)를 사용하면

format의 매개 변수 숫자를2진수로

변환해 준다.

 

 

"{:b}".format(10)

=>'1010"(문자열 자료형으로 출력됨)

 

 

 

 

반대로 2진수를 10진수로 변환할 때는

int 함수를 사용하고 매개변수로

'문자열'형태로 숫자를 입력, 뒤에

2를 붙여주면 10진수로 변환이 된다.

 

 

 

int('1010,2)

=>10

 

 

 

 

 

 

 

 


 

 

 

 

 

문제)

 

 

 

1~100 사이의 숫자 중

2진수로 변환했을 때 0이

하나만 포함된 숫자를 찾고

그 숫자들의 합을 구하는 코드를 작성해라.

 

 

 

 

 

 

힌트)

 

 

 

ourtput = [ 리스트 내포 사용]

 

for i in < > :

print( "{ } : { }".format( i, "{ :b }", format(i)))

print("합계 : ", sum( output ))

 

 

 

 

 

실행 결과)

 

 

2 : 10

5 : 101

6 : 110

11 : 1011

...

62 : 11110

95 : 1011111

합계 : 593

 

 

 

 

 

 

풀이)

 

 

 

먼저 문제를 키워드로 정리해본다.

 

 

 

1~100사이의 숫자 중

2진수로 변환했을 때

0이 하나만 포함된 숫자를 찾아

 

그것들의 을 구한다.

 

 

 

 

 

1. 1~100까지를 i에 담고

출력해 보자.

 

 

for i in range(1, 100 +1):

print(i)

 

 

 

 

 

2. 이제 이 출력된 수들을

2진수로 변환해 준다.

 

 

print(" { :b} ".format(i) )

 

 

 

 

 

3. 다음으로는 0이 하나만 포함된

숫자를 찾아야 하는데 이를 위해선

count라는 함수를 사용해야 한다.

 

 

 

count ( ) 함수

문자열 내에 특정 문자가 몇 개

들어가 있는지 확인할 때 사용한다.

 

 

 

예)

 

 

 

 

 

 

 

 

 

 

이를 활용하여 조건문을 만들면

 

 

if "{:b}".format(i).count("0") == 1:

 

 

2진수로 변환된 수 중 0 이 1개인 경우이다.

 

 

 

 

 

 

 

 

*주석(#)으로 처리한 코드가 원래 코드,

그 아래는 어떤 숫자가 0을 하나만 가지고

있는지 확인해 보려고 추가로 작성한 코드이다.

 

 

 

 

 

4. 이제 합을 구해야 한다.

 

 

 

먼저 output을 0으로 초기화하고

내부로 들어왔을 때 i를 더해준다.

 

 

 

마지막으로 출력!

(print가 들여 쓰기가 되지

않도록 주의하자)

 

 

 

 

 

 

 

 

 

 

 

이제 위 코드를

리스트 내포를 사용해

작성해 보자.

 

 

 

 

 

 

 

 

 

리스트 내포를 활용하여

실행 결과를 10진수 : 2진수

형식으로 출력하고 싶다면!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts