본문 바로가기

STUDY/Python

[데이터 과학을 위한 파이썬 프로그래밍_2판] 9. 파이썬 스타일 코드(2)

연습문제 풀이.

 

 

1. 아래 코드의 실행 결과는?

a = [[1,2,3,5], [1,2,3,4]]
b = [[40,40], [30,30], [20,20], [10,10]]
print([[sum([t[0]*t[1] for t in zip(i,j)]) for j in zip(*b)] for i in a])

- 답 및 해설

# 입력
a = [[1,2,3,5], [1,2,3,4]]
b = [[40,40], [30,30], [20,20], [10,10]]
print([[sum([t[0]*t[1] for t in zip(i,j)]) for j in zip(*b)] for i in a])

# 출력
[[210, 210], [200, 200]]

=>  zip() 함수는 같은 인덱스의 원소끼리 튜플로 묶는다. *(asterisk)는 시퀀스 자료형 데이터가 할당된 변수에 붙일 경우 해당 데이터를 언패킹한다.

 ex) b=[1,2,3,4]. print(b) : [1,2,3,4]. print(*b) : 1, 2, 3, 4

 

i : [1,2,3,5]  //  [1,2,3,4]

*b : [40,40], [30,30], [20,20], [10,10],    zip(*b) : (40,30,20,10), (40,30,20,10)

j : (40,30,20,10)  //  (40,30,20,10)

t : (1,40), (2,30), (3,20), (5,10), (1,40), (2,30), (3,20), (5,10)  //  (1,40), (2,30), (3,20), (4,10), (1,40), (2,30), (3,20), (4,10)

 

 

 

 

 

2. 아래 코드의 실행 결과는?

a=[1,2,3]
b=[4,5,6]
c=[7,8,9]

print([[sum(k),len(k)] for k in zip(a,b,c)])

- 답 및 해설

# 입력
a=[1,2,3]
b=[4,5,6]
c=[7,8,9]

print([[sum(k),len(k)] for k in zip(a,b,c)])

# 출력
[[12, 3], [15, 3], [18, 3]]

=> k : (1,4,7), (2,5,8), (3,6,9)

 

 

 

 

 

3. 아래 코드의 빈칸에 들어갈 알맞은 코드는?

# 입력
int_list=[1,2,3,5,10]
result = [빈칸 for i in int_list]
print(result)

# 출력
[0,0,1,1,3]

ⓛ i  ② i+2  ③ i//3  ④ i*3  ⑤ i/3

 

- 답 및 해설

③ i//3

=> list comprehension 구문이다. list 안에는 i를 3으로 나눈 몫을 넣을 거고, i는 for문으로부터 가져오는 1, 2, 3, 5, 10이 된다.

 

 

 

 

 

5. 아래 코드의 실행 결과는?

date_info = {'year':'2019', 'month':'9', 'day':'6'}
result = '{year}-{month}-{day}'.format(**date_info)

print(result)

- 답 및 해설

# 입력
date_info = {'year':'2023', 'month':'8', 'day':'23'}
result = '{year}-{month}-{day}'.format(**date_info)

print(result)

# 출력
2023-8-23

=> *를 2개 사용하면 딕셔너리형을 패킹, 언패킹하게 된다. date_info라는 변수에 할당된 데이터는 key value 쌍이 3개인 dict형 데이터이므로, date_info에 **를 2개 붙여 출력하면 각각의 key value 쌍이 언패킹된다.