# Slice and Sorting
# 자연어처리할 때 str slice 많이 함
# list도 slice 가능, 긴 list 출력보다 sublist가 보기 편함
# Slice
s = '0123456789'
print(s)
0123456789
print(s[:3])
012
print(s[0:3])
012
print(s[-5:])
56789
print(s[5:])
56789
print(s[3:7])
3456
# 파이썬에서 str은 character list
l = list(s)
print(l)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
print(l[3:7])
['3', '4', '5', '6']
# Sorting
s = '뒤의 다섯글자를 slice 하고 싶다면 아래처럼 하면 됩니다. 이 방법이 좋은 이유는 s의 길이가 얼마이던지 뒤의 5글자를 잘라낸다는 점입니다. 당연히 길이가 10인 s이니, 앞의 5부터 시작해도 동일한 결과가 나옵니다. sorting은 sorted 함수로 손쉽게 할 수 있습니다. 아래의 문장에서 각 글자가 몇 번 등장했는지 카운트를 하여 빈도수 순으로 정렬을 해보겠습니다. 카운트는 collections.Counter를 이용합니다.'
print(s)
뒤의 다섯글자를 slice 하고 싶다면 아래처럼 하면 됩니다. 이 방법이 좋은 이유는 s의 길이가 얼마이던지 뒤의 5글자를 잘라낸다는 점입니다. 당연히 길이가 10인 s이니, 앞의 5부터 시작해도 동일한 결과가 나옵니다. sorting은 sorted 함수로 손쉽게 할 수 있습니다. 아래의 문장에서 각 글자가 몇 번 등장했는지 카운트를 하여 빈도수 순으로 정렬을 해보겠습니다. 카운트는 collections.Counter를 이용합니다.
# counter는 dict 형식, items()를 하면 (글자, 빈도수) pair가 만들어짐
# sorted에서 key는 정렬기준을 정의
from collections import Counter
counter = Counter(s)
print(list(counter.items())[:10], '...\n')
[('뒤', 2), ('의', 5), (' ', 52), ('다', 9), ('섯', 1), ('글', 3), ('자', 3), ('를', 4), ('s', 6), ('l', 3)] ...
# lambda: 이름없는 함수
# lambda x:x[1] : x라는 변수가 들어왔을 때, x[1]을 return하라는 의미
# (단어, 빈도수)가 x로 입력되면 1번째 값인 빈도수를 return
# 이를 기준으로 정렬, 순서는 reverse로 숫자가 큰것에서 작은것으로 decreasing order를 따름
from pprint import pprint
pprint(sorted(counter.items(), key=lambda x:x[1], reverse=True)[:10])
[(' ', 52),
('다', 9),
('이', 8),
('니', 7),
('.', 7),
('s', 6),
('의', 5),
('o', 5),
('를', 4),
('e', 4)]
# 빈도수 기준으로 정렬
pprint(sorted(counter.items(), key=lambda x:x[1])[:10])
[('섯', 1),
('고', 1),
('싶', 1),
('처', 1),
('럼', 1),
('됩', 1),
('방', 1),
('법', 1),
('좋', 1),
('유', 1)]
# 빈도수, alphabet order로 정렬
pprint(sorted(counter.items(), key=lambda x:(x[1], x[0]))[:10])
[(',', 1),
('0', 1),
('1', 1),
('C', 1),
('d', 1),
('g', 1),
('u', 1),
('각', 1),
('게', 1),
('겠', 1)]
# 함수로 만들어 사용
def sorting_key(x):
return -x[1]
pprint(sorted(counter.items(), key=sorting_key)[:10])
[(' ', 52),
('다', 9),
('이', 8),
('니', 7),
('.', 7),
('s', 6),
('의', 5),
('o', 5),
('를', 4),
('e', 4)]
'파이썬' 카테고리의 다른 글
Scraping Naver Movie (0) | 2017.08.30 |
---|---|
_yield_len_iter (0) | 2017.08.29 |
list comprehension (0) | 2017.08.28 |
Pickle (0) | 2017.08.28 |
Dictionary (0) | 2017.08.28 |