Notice
Recent Posts
Recent Comments
Link
Love Every Moment
〔모두를 위한 파이썬〕튜플, 가장 빈도가 높은 단어 찾기 본문
반응형
1. 튜플과 리스트의 차이
- 튜플은 리스트와 매우 유사하지만, 두 가지 차이점이 있다
- 첫 번째는 리스트가 대괄호[] 를 이용한다면 튜플은 소괄호() 를 사용한다는 것,
- 두 번째는 리스트는 변경 가능(mutable)하지만 튜플은 변경 불가능(immutable)하다는 것이다
- 튜플이 immutable 하다는 특징 때문에 위와 같이 리스트에서 사용 가능했던 sort(), append(), reverse() 가 튜플에서는 사용 불가능
- 이 특성 때문에 튜플은 메모리나 퍼포먼스 면에서 리스트보다 효율적이며
- 임시 변수를 만들 때에는 리스트보다 튜플이 선호된다
l = list()
dir(l)
# ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
t = tuple()
dir(t)
# ['count', 'index']
- 리스트를 dir() 했을 때에는 내용물을 변경할 수 있는 메서드들이 들어있지만, 튜플을 dir() 하면 내용물의 변경 없이 작동하는 count(), index() 메서드만 들어있다는 것을 확인할 수 있다
2. 튜플 사용 방법
- (x, y) = (1, 2) 와 같은 형식으로 할당할 수 있다
- 딕셔너리의 메서드 items() 를 사용하면 반환되는 (key, value)의 쌍 역시 튜플이다
3. 튜플의 특징
- 튜플은 비교 가능하다
- 예를 들어 (0, 1, 2) < (5, 1, 2) 의 결과로 True 를 반환한다
- 이는 왼쪽 요소부터 비교해서 0 < 5 이므로 바로 True 를 반환한 것이며, 이후의 요소는 비교하지 않는다
- 만약 앞의 요소들이 같다면 그 다음 요소를 차례대로 비교한다
4. 튜플로 이루어진 리스트 정렬하기
- 빌트인 함수인 sorted() 를 사용하여 리스트를 정렬할 수 있다
- sorted() 는 주어진 리스트를 정렬한 새로운 리스트를 만들어 반환한다
- 기존의 리스트를 변경하는 것이 아니다
- 키 대신 값을 가지고 정렬하고 싶다면?
- 새로운 빈 리스트를 생성하여 (값, 키) 순서로 이루어진 튜플을 리스트에 추가해준다
- 새롭게 생성된 리스트를 sorted() 한 결과를 받아서 출력한다
reverse=True 는 기본값인 오름차순이 아닌 내림차순으로 정렬하라는 의미!
5. 튜플 이용하여 가장 자주 등장한 단어 찾기
- 위에서 다룬 것과 마찬가지로 값을 내림차순으로 정렬하면 쉽게 찾을 수 있다!
- lst 는 값이 가장 큰(=자주 등장한) 요소부터 정렬된 리스트일 것이므로 lst[:10] 를 출력하면 된다
- 오른쪽 사진은 더욱 간단하게 정렬하는 방법으로, 리스트 컴프리헨션(List Comprehension) 이라고 부른다
6. 실습
fname = input('Enter File: ')
if len(fname) < 1 : fname = 'clown.txt'
hand = open(fname)
di = dict()
for lin in hand :
lin = lin.rstrip()
wds = lin.split()
# 현재 단어 딕셔너리에 저장
for w in wds :
di[w] = di.get(w,0) + 1
# 가장 자주 등장한 단어 찾기
# largest: 가장 자주 등장한 단어 횟수
# theword: 가장 자주 등장한 단어
largest = -1
theword = None
for k, v in di.items() :
if v > largest :
largest = v
theword = k
print(theword, largest)
tmp = list()
for k, v in di.items() :
new_tuple = (v, k)
tmp.append(new_tuple)
print('Flipped', tmp)
tmp = sorted(tmp, reverse=True)
print('Sorted', tmp)
for v, k in tmp[:5] :
print(v, k)
반응형
'PROGRAMMING::LANGUAGE > Python' 카테고리의 다른 글
〔백준/파이썬〕2675번 문자열 반복 (0) | 2022.06.24 |
---|---|
〔백준/파이썬〕10809번 알파벳 찾기 (0) | 2022.06.24 |
〔모두를 위한 파이썬〕딕셔너리, 데이터 빈도수 측정하기 (0) | 2022.06.24 |
〔모두를 위한 파이썬〕리스트, split() 으로 원하는 부분 추출하기, 가디언 패턴 (0) | 2022.06.23 |
〔백준/파이썬〕1065번 한수 (0) | 2022.06.23 |
Comments