#re 라이브러리의 sub 함수 사용 s = re.sub('[^a-z0-9]','',s) #문자형에서 isalnum() 함수 사용 if char.isalnum():
re.sub내부를 보면 첫번째 인자로 [^a-z0-9]를 문자열로 받는데 여기서 a-z는 영문자 모두를 의미하고 0-9는 숫자 모두를 의미한다.
그다음 인자는 ''인데 대괄호안에 포함되지않은 것들을 두번째 인자로 변경한다.
세번째 인자는 s인데 입력받은 문자열을 의미한다.
이를 다시 s에 재입력 해주어 입력받은 문자열을 숫자형과 문자형만 남긴다.
두번째 if char.isalnum(): 은 for문을 이용해 s에서 하나씩 꺼내면서 isalnum()을 이용해 문자형이거나 숫자형인것만 True로 반환한다.
#isdigit() 함수 사용 if log.split()[1].isdigit():
문자형을 받고 isdigit() 함수를 사용하면 '1'과 같은 숫자일때 True를 반환한다.
두번째꺼 먼저 기준으로 정렬 후 첫번째꺼 기준으로 정렬
letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
코드를 보면 sort함수를 사용했는데 sort 함수에 key를 입력하면 조건에 맞게 정렬할수 있다. lamda함수를 사용하여 (x.split()[1:], x.split()[0]) 이렇게 조건을 주어 letters내의 문자열들을 두번째 단어 기준으로 먼저 정렬 후 두번째 단어가 같을 경우 첫번째 단어 기준으로 정렬하였다.
words = [word for word in re.sub(r'[^\w]', ' ', paragraph).lower().split() if word not in banned]
위 식에서 볼수 있듯이 마찬가지로 re.sub를 사용하였다.
정규식에서 ^는 not을 의미하고 \w는 단어를 의미한다. 따라서 단어가 아닌 것을 공백으로 치환하는 것이다.
출처 : 파이썬 알고리즘 인터뷰 (박상길 지음)