python(3)

clean·2022년 1월 20일
0

여러 조건으로 정렬 문제 tip

문제가 A로 정렬하고 A가 같을 경우 B로 B가 같을 경우 C로 정렬해라. 일 때

## list가 [[A,B,C]] 이럴 때
## 방법 1) 세번에 나눠서 정렬 (C로 정렬, 그담 B로 정렬, 그다음 A로 정렬)
list.sort(key=lambda a:a[2])
## ..
list.sort(key=lambda a:a[1])
## .. 
list.sort(key=lambda a:a[0])

## 방법 2) 걍 한번에 정렬 (한번에 정렬 시 각 A가 같으면 B, B가 같으면 C로 비교해서 정렬하도록)
list.sort(key=lambda a:(a[0],a[1],a[2]))

한 글자에서 최대 다섯 글자 사이의 연속된 숫자를 찾는 패턴

  • \d{1,5}

정규식

split

  • 패턴 a를 기준으로 split
print(re.split('\d{1,5}', 'muzi1.TXT')) ## ['muzi', '.TXT']

findall

  • 패턴이 일치하는 문자열을 모두 찾아서 반환 (반환값: 배열)
str = 'foo010bar020.zip'
print(re.findall('\d{1,5}', str)) ## ['010', '020']

finditer

  • 패턴과 일치하는 문자열을 모두 찾아서 반환 (반환값: Match 오브젝트 iterator)
  • 일치하는 값들을 확인해야 할 때, 문자열 뿐만이 아니라 매치된 위치도 궁금할 때 유용할듯

compile

  • 패턴을 컴파일해두고 사용, 정규식과 일치하는 첫번째 문자열만 반환 (반환값: Match오브젝트)
re_obj = re.compile('\d{1,5}')
for name in names:
	## name ='foo010bar020.zip'
	result = re_obj.search(name) ##<re.Match object; span=(3, 6), match='010'>
    ...

match

  • 문자열의 첫부분이 정규식과 일치하면 해당 문자열을 반환 (반환값: Match 오브젝트)
str = 'foo010bar020.zip'
str2 = '010bar020.zip'
re_obj = re.compile('\d{1,5}')
print(re_obj.match(str)) ## NONE
print(re_obj.match(str2)) ## NONE 	<re.Match object; span=(0, 3), match='010'>

fullmatch

  • 문자열 전체가 매치되는지를 체크 (반환값: Match 오브젝트)

Match 오브젝트

  • start()
    - 매치된 문자열의 시작 위치
  • end()
    - 매치된 문자열의 끝 위치
  • span()
    - 매치된 시작, 끝 위치 (tuple)
  • group()
    - 매치된 문자열

sub

  • 매치된 부분을 치환 이건 나중에~!

0개의 댓글