2022.02.17 - [개발/Python] - [Python] 리스트 comprehension (1)/ 예제로 공부하는 Python 100 문제풀이
지난 글에 이어서 이번엔 응용편으로 들어가 본다.
공부하고 있는게 '예제로 공부하는' 이기 때문에 응용은 예제로 들어간다.
1. [ ]를 사용하지 않고 list()와 for 문으로 리스트 만들기
처음에는 아직 익숙하지 않은 파이썬의 문법에 어.. 뭐지? 했으나 금방 하는방법을 알았다.
#괄호 [] 를 사용하지 않고 list() 와 for 문으로 1~10 리스트 만들기
a = list(i for i in range(1, 11))
print('a - ',a, type(a))
list( )를 선언해주고 그 안에 comprehension을 사용하여 반복문을 돌려주면 된다.
2. 1~10 제곱
아마 다른 언어를 공부해봤거나, 센스가 있다면 쉽게 생각해낼 수 있다.
# 1~10 각 숫자 제곱한 리스트
b = [i*i for i in range(1, 11)] #i**2, pow(i, 2) 도 가능
print('b - ', b, type(b))
기존에는 i for i in range(1, 11) 를 사용한것에 앞의 i만 i*i 로 바꿔주면 된다.
뒤의 주석으로 알 수 있듯이
앞서 연산자 항목에서 배웠던 i**2또한 가능하며, 제곱을 해주는 내장함수인 pow(i, 2)를 사용해도 동일한 결과값이 나온다.
3. 1~10 제곱, 5의 제곱은 제외
이 문항은 comprehension 뒤에 if문까지 쓸 수 있냐를 물어보는 것이다.
방법은 간단하다. 그냥 뒤에 붙여주면 된다.
# 1~10 각 숫자 제곱, 5의 제곱 제외
c = [i*i for i in range(1, 11) if i != 5 ]
print('c - ', c, type(c))
if i != 5 를 통해서 5가 아닌 숫자만 출력시킨 것이다.
4. 1~50 짝수, 홀수만 출력
이것은 위 3번 문항의 아주 살짝 응용편이라고 생각하면 된다.
홀수
d = [i for i in range(1, 51) if i % 2]
print('d 홀수- ', d, type(d))
짝수
d_2 = [i for i in range(1, 51) if i % 2 == 0]
print('d_2 짝수- ', d_2, type(d_2))
???: 짝수에서는 i % 2 == 0 까지 붙여줬는데 홀수에서는 뒤에 없는데 어캐 나옴??
홀수인 수를 2로 나눳을때 나머지는 반드시 1이 나온다. 이때 대부분의 프로그래밍 언어들은 0을 제외한 다른 수는 true 로 인식하기 때문에 가능하다.
짝수일 때는 i % 2 == 0 까지 해 줘야 짝수인 수만 출력이 된다.
5. 함수 사용
출력되는 부분에 앞서 언급된 pow( )를 비롯한 다른 내장함수 또는 직접만든 함수의 사용이 가능하다.
예시로 음수가 포함된 리스트에서 절대값을 출력하는 코드이다.
# 함수 사용
e = [abs(i) for i in [1, 2, -3, 4, 5, -6, 7, 8, -9 ,10]]
print('e 절대값- ', e)
직접만든 함수를 사용하는 방법은
e = [my_func(i) for i in [1, 2, -3, 4, 5, -6, 7, 8, -9, 10]]
위처럼 사용하면 된다.
6. 중첩 반복문
반복문을 썻다면 당연히 반복문의 중첩도 되어야 하지 않겠는가?
쌉가능 하다.
처음엔 단순하게
f = [i, j for i in range(3) for j in range(3)]
위의 코드를 호기롭게 쓴 후 실행시켰으나 에러가 발생하였다.
i, j 이렇게 쓰면 에러가 발생한다. 그럼 뒤에 넣으면 괜찮지 않을까??
f = [i for i in range(3) j for j in range(3)]
당연하지만 이 또한 에러가 난다.
그럼 어떻게 해야 하느냐?
리스트 안에 다른 타입을 만들어 주면 된다.
# 중첩 반복문
f = [(i, j) for i in range(3) for j in range(3)]
print('f - ', f, type(f))
리스트 안에 튜플을 사용하여 (i, j) 를 만들어 주었다. 위 처럼 하면 에러가 발생하지 않는다.
이상 끗
'Language > Python' 카테고리의 다른 글
[Python] 함수(1) / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.02.24 |
---|---|
[Python] dict, 사전, 삽입, 수정, 삭제 / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.02.22 |
[Python] 리스트 comprehension (1)/ 예제로 공부하는 Python 100 문제풀이 (0) | 2022.02.17 |
[Python] 리스트 (2) / 추가, 수정, 삭제, 병합, 인덱스, 중복 제거/ 예제로 공부하는 Python 100 문제풀이 (0) | 2022.02.09 |
[Python] 리스트 (1) / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.01.21 |
댓글