반응형
[주절주절]
-
[Today I Learned]
# 파이썬 정렬 함수
1) sort : '변수.sort()' 형태로 사용하며 원본을 곧바로 변형시킨다. (제자리 정렬) 따라서 별도의 추가 공간이 필요하지 않다.
num_list = [5,2,4,1,3]
num_list.sort()
print(num_list)
[1,2,3,4,5]
2) sorted : 원본을 변형시키지 않고 정렬된 결과를 return한다.
print(sorted([3,4,5,1,2])
[1,2,3,4,5]
+ sorted(문자열)을 할 경우 문자열 각각의 문자를 sort, list로 return한다.
- 두 메소드 모두 key와 reverse 파라미터를 갖는다.
1) key : 정렬의 기준이 될 값을 return하는 함수를 넣는다. lambda를 이용할 수 있다.
str_list = ['안녕', '저녁뭐먹지', '비빔면', '돼지고기']
print(sorted(str_list, key=len))
['안녕', '비빔면', '돼지고기', '저녁뭐먹지']
print(sorted(str_list, key=lambda x: x[1]))
['저녁뭐먹지', '안녕', '비빔면', '돼지고기']
함수가 tuple을 return 하게 해 예외처리를 해줄 수도 있다. (아래 예시 참고)
2) reverse : 디폴트는 False이고 True를 입력하면 내림차순으로 정렬이 가능하다.
+ 로그 정렬
def sort_logs(logs):
letters, digits = [], []
for log in logs:
if log.split()[1].isdigit():
digits.append(log)
else:
letters.append(log)
letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
return letters + digits
+ split() 함수의 디폴트값은 공백으로, 위와 같이 사용할 경우 공백에 대해 쪼개준다.
+ split()의 반대 역할로는 join이 있다. 사용법이 좀 특이함(?!)
str_list = ['hi','how', 'are', 'you']
joined_str = "".join(str_list)
print(joined_str)
hihowareyou
# Counter
- collections 모듈의 Counter 클래스는 dictionary를 확장한 클래스로, 데이터의 개수를 셀 때 유용하다.
paragraph = "Bob hit a ball, the hit Ball flew far after it was hit."
counts = Counter(paragraph.split())
print(counts)
- 개수를 센 후, 가장 많이 등장한 element를 뽑을 땐 most_common 메소드를 사용하면 된다.
+ 가장 흔한 단어
from collections import Counter
def most_common(paragraph, banned):
# 전처리
words = [word for word in re.sub(r'[^\w]',' ',paragraph).lower().split() if word not in banned]
# Counts
counts = Counter(words)
return counts.most_common()[0][0]
# defaultdict
- 역시나 collections 모듈에 속하는 클래스로, key값이 없을 경우 미리 지정해놓은 디폴트값을 반환하는 딕셔너리이다. (일반 딕셔너리는 아래와 같은 코드에서 KeyError를 일으킨다.)
from collections import defaultdict
d = defaultdict(int)
d['A'] = 2
d['B'] = 8
print(d['C'])
+ 애너그램
from collections import defaultdict
def anagram(input):
result = defaultdict(list)
for i in input:
k = "".join(sorted(i))
result[k].append(i)
return result.values()
[질문 노트]
-
반응형
'컴린이 일기장 > Today I Learned' 카테고리의 다른 글
[TIL] sys.maxsize / (단일) 연결 리스트 / 파이썬 다중할당 (0) | 2021.07.21 |
---|---|
[TIL] 파이썬 pass, continue, break / 선형자료구조 (배열, 스택) (0) | 2021.07.19 |
[TIL] 파이썬 문자열 조작 / Deque (0) | 2021.07.14 |
[TIL] 부동소수점 / 빅오(시간복잡도) / Python 자료형 (0) | 2021.07.12 |
[TIL] Python getattr()과 import_module (0) | 2021.04.04 |