Love Every Moment

〔모두를 위한 파이썬〕튜플, 가장 빈도가 높은 단어 찾기 본문

PROGRAMMING::LANGUAGE/Python

〔모두를 위한 파이썬〕튜플, 가장 빈도가 높은 단어 찾기

해 송 2022. 6. 24. 16:16
반응형

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) 이라고 부른다
 

[Python] list comprehension에 대한 즐거운 이해

리스트를 생성하는 Python만의 독특한 문법인 list comprehension에 대해 살펴보고 다양한 예제를 만들어봅니다. 그리고 set, tuple, dict와 같은 다른 내장 자료구조에도 적용해봅니다.

shoark7.github.io

 


 

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)
반응형
Comments