문자열 알고리즘

이수종·2022년 11월 15일
0

무작위적으로 문자열을 입력 받았을때 문자형과 숫자형을 걸러내기 위해서 아래의 코드를 쓸수 있다.

#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는 단어를 의미한다. 따라서 단어가 아닌 것을 공백으로 치환하는 것이다.

출처 : 파이썬 알고리즘 인터뷰 (박상길 지음)

0개의 댓글