리스트 컴프리헨션은
리스트 내포라고 불리는
구문인데
자주 또 많이 사용되는 코드를
보다 쉽고 간단히 입력할 수 있도록
고안된 작성법을 일컫는 말이다.
예제를 보자.
위 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진수
형식으로 출력하고 싶다면!
'프로그래밍 > Python' 카테고리의 다른 글
기초) 가변 매개변수와 기본 매개변수 차이 (0) | 2020.05.28 |
---|---|
기초) 함수 기본 개념 정리 (2) | 2020.05.27 |
기초) 리스트와 딕셔너리에 적용하는 함수 (0) | 2020.05.27 |
문제 풀기) 종합 문제 (0) | 2020.05.26 |
기초) break / continue 키워드 (0) | 2020.05.26 |