Tuple
튜플은 소괄호(())로 이루어져 있으며 위치와 순서가 정해져 있어 리스트와 비슷하게 작동한다.
x = ('Glenn', 'Sally', 'Joseph')
print(x[2]) # Joseph
y = (1, 9, 2)
print(y) # (1, 9, 2)
print(max(y)) # 9
for iter in y:
print(iter)
# 1
# 9
# 2
튜플이 리스트와 다른 점은 변경을 할 수 없다는 것이다.
튜플의 이점은 용량을 적게 차지하고 접근이 빠르기 때문에 리스트보다 효율적이다.
튜플과 딕셔너리
items() 메서드를 통해 반환되는 값은 키와 밸류로 이루어진 튜플의 리스트이다.
d = {'csev' : 2, 'cwen' : 4}
tups = d.items():
print(tups) # [('csev', 2),('cwen', 4)]
튜플의 이점 중 하나는 서로 비교가 가능하다는 점이다. 비교 시 왼쪽을 우선으로 비교하게 되며, 값이 같을 경우 바로 오른쪽의 값을 비교하게 된다.
(0, 1, 2) < (5, 1, 2) # True
(0, 1, 2000000) < (0, 3, 4) # True. 0이 같기 때문에 1과 3을 비교하여 결과를 반환한다.
('Jones', 'Sally') < ('Jones', 'Sam') # True. 문자열의 비교는 철자의 순서에 따라 정해진다. a < z
('Jones', 'Sally') < ('Adams', 'Sam') # False. A는 J보다 작다.
딕셔너리에서 정렬된 튜플 리스트 반환받기
# key 기준으로 정렬
d = {'a':10, 'b':1, 'c':22}
sorted(d.items()) #[('a', 10), ('b', 1), ('c', 22)]
# value 기준으로 정렬
tmp = list()
for k, v in d.items():
tmp.append((v, k))
tmp = sorted(tmp, reverse=True) # 내림차순 역순정렬
# [(22, 'c'), (10, 'a'), (1, 'b')]
가장 많이 나온 단어들 top 10
# 1. 센다
fhand = open('romeo.txt')
counts = dict()
for line in fhand:
words = line.split()
for word in words:
counts[word] = counts.get(word, 0) + 1
# 2. key, value를 뒤집어 튜플로 만든 뒤 리스트에 저장한다.
lst = list()
for key, val in counts.items():
newtup = (val, key)
lst.append(newtup)
# 3. 내림차순으로 정렬한다.
lst = sorted(lst, reverse = True)
# 4. 위에서 10개를 가져와서 다시 key value 순서로 출력한다.
for val, key in lst[:10]:
print(ket, val)
# 2, 3번 자리를 꿰찰 짧은 버젼 (오름차순 정렬)
print( sorted( [ (v,k) for k,v in counts.items() ] ) )
Assignment
Assignment 10.2는 이전과 마찬가지로 mbox-short.txt를 읽고 'From: '으로 시작되는 행을 탐색한 뒤 각 메시지에 대한 시간별 분포를 알려주는 프로그램을 작성하는 것이었다. 우선 split() 함수를 통해 시간을 찾은 다음 콜론을 사용하여 문자열을 다시 한번 분할하여 시간을 추출해내야 했다. 그다음엔 각 시간에 대한 카운트를 세어 주는 루프를 돌린 후, 시간별로 정렬하여 카운트를 출력해야 했다.
나의 풀이는 다음과 같다.
# ex_10_2
name = input("Enter file:")
if len(name) < 1:
name = "mbox-short.txt"
handle = open(name)
count = dict()
res = list()
for line in handle:
if not line.startswith('From ') : continue
line = line.split()
line = line[5]
line = line.split(':')
line = line[0]
count[line] = count.get(line, 0) + 1
for k,v in sorted(count.items()):
#tupp = (k,v)
#res.append(tupp)
print(k,v)
이것으로 PY4E의 두 번째 강의인 Python Data Structures를 마치게 되었다.
'Python > PY4E' 카테고리의 다른 글
PY4E Chapter 11. Regular Expressions (0) | 2022.08.09 |
---|---|
PY4E Chapter 9. Dictionaries (0) | 2022.08.08 |
PY4E Chapter 8. Lists (0) | 2022.08.08 |
PY4E Chapter 7. Files (0) | 2022.08.07 |
PY4E Chapter 6. Strings (0) | 2022.08.05 |
댓글