본문 바로가기

STUDY/Python

[데이터 과학을 위한 파이썬 프로그래밍_2판] 7. 자료구조

연습문제 풀이.

 

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

score_dict = {'Kim':80, 'Lee':85, 'Ahn':83, 'Choi':90}
f_key = list(score_dict.keys())[0]
score_dict[f_key] = 90
print(score_dict.values())

- 답 및 해설

# 입력
score_dict = {'Kim':80, 'Lee':85, 'Ahn':83, 'Choi':90}
f_key = list(score_dict.keys())[0]
score_dict[f_key] = 90
print(score_dict.values())

# 출력
dict_values([90, 85, 83, 90])

=> f_key는 score_dict의 key를 원소로 갖는 list의 0번째 인덱스를 갖는 값이다. 즉 'KIM'.

score_dict['KIM']=90은 score_dict의 원소 중 'KIM'을 key로 갖는 원소의 value를 90으로 한다는 의미이므로 원래 value인 80이 90으로 바뀐다.

.values()는 dict형 자료의 value만 출력하는 함수. 따라서 출력값은 dict_values([90, 85, 83, 90])

 

 

 

 

 

2. 빈 칸에 알맞지 않은 코드를 모두 고르시오

# 입력
from collections import deque

deque_list = deque(['a', 'b', 'c'])
<<빈칸>>
print(deque_list)

# 출력
deque(['c', 'a', 'b'])

① deque_list.rotate(1)

② deque_list.rotate(-2)

③ deque_list.appendleft('c')

④ deque_list = deque(['c', 'a', 'b'])

⑤ deque_list = deque(['a', 'b', 'c'])

 

- 답 및 해설

③ deque_list.appendleft('c'),  deque_list = deque(['a', 'b', 'c'])

=> deque는 중복이 허용된다. c를 추가한 뒤 맨 뒤의 c를 없애야 출력값과 같은 결과를 얻을 수 있다.

 

 

 

 

 

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

from collections import Counter

text = 'Hello, this is python world!'
c = Counter(text)
print(c['l'])

- 답 및 해설

# 입력
from collections import Counter

text = 'Hello, this is python world!'
c = Counter(text)
print(c['l'])

# 출력
3

=> Counter()는 시퀀스 자료형을 이루는 데이터가 각각 몇 개씩 있는지 그 값을 key, 갯수를 value로 갖는 dict 형태 데이터로 반환한다. 위와 같은 경우, print(c['l'])는 dict형 데이터인 c에서 key 'l'의 value를 출력하는 코드다. 

따라서 답은 해당 텍스트 내의 l 갯수인 3.

 

 

 

 

 

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

dic = {'a':1, 'b':2, 'c':3}
dic.setdefault('b', 4)
dic.setdefault('d', 5)
dic['c'] = dic['d']
dic['d'] = dic['b']
print(dic)

- 답 및 해설

# 입력
dic = {'a':1, 'b':2, 'c':3}
dic.setdefault('b', 4)
dic.setdefault('d', 5)
dic['c'] = dic['d']
dic['d'] = dic['b']
print(dic)

# 출력
{'a': 1, 'b': 2, 'c': 5, 'd': 2}

=> setdefault(k, v)는 dict의 key 중 'k'가 없다면 k:v 쌍을 추가하는 함수다. dic의 key에는 b가 있고 d가 없으므로 b의 value는 그대로 2고 맨 뒤에 d:5쌍이 추가된다.

dic['c']=dic['d']가 실행되어 c:3 쌍이 c:5가 되고, dic['d']=dic['b']가 실행되어 d:5 쌍이 d:2가 된다.

따라서 출력값은 {'a': 1, 'b': 2, 'c': 5, 'd': 2}

 

 

 

 

 

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

fruits = ('apple', 'banana', 'cherry', 'strawberry')
fruits[0] = 'orange'

- 답 및 해설

# 입력
fruits = ('apple', 'banana', 'cherry', 'strawberry')
fruits[0] = 'orange'

# 출력
Traceback (most recent call last):
  File "C:\Untitled-1.py", line 2, in <module>
    fruits[0] = 'orange'
TypeError: 'tuple' object does not support item assignment

=> tuple 자료형은 수정할 수 없다

 

 

 

 

 

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

def del_list_element(lists, values):
    if values in lists:
        lists.remove(values)
        return lists
    else:
        return 'False'
    
data = ['a', 1, 'Wien', '1994.0']
value = float(1994)
result = del_list_element(data, value)
print(result)

- 답 및 해설

# 입력
def del_list_element(lists, values):
    if values in lists:
        lists.remove(values)
        return lists
    else:
        return 'False'
    
data = ['a', 1, 'Wien', '1994.0']
value = float(1994)
result = del_list_element(data, value)
print(result)

# 출력
False

=> data의 네 번째 원소 '1994.0'은 float형 데이터가 아니라 str형 데이터다. result가 False가 아니게 하려면 value = float(1994)를 value = str(float(1994))로 바꿔주면 될 것이다.

 

 

 

 

 

 

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

a=[3, 'apple',  2016, 4]
b=a.pop(0)
c=a.pop(1)
print(b+c)

- 답 및 해설

# 입력
a=[3, 'apple',  2016, 4]
b=a.pop(0)
c=a.pop(1)
print(b+c)

# 출력
2019

=> pop()은 리스트에서 괄호 안의 값을 삭제하고, 해당 값을 반환한다.

b는 a의 0번째 인덱스의 값인 3이고, a에서 해당 값은 삭제된다. c는 3이 삭제된 후의 a의 1번째 인덱스의 값인 2016이고, a에서 해당 값은 삭제된다.

따라서 출력값은 2019