# 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)]


# reverse 대신 빈도수에 -1을 곱해도 된다
pprint(sorted(counter.items(), key=lambda x:-x[1])[: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

+ Recent posts