[파이썬 알고리즘] 문자열 조작

신현식·2023년 5월 1일
0

파이썬알고리즘

목록 보기
2/4
post-thumbnail

알파벳인지 확인하기(isalpha)

문자열의 구성이 알파벳인지에 대해서 확인하는 방법이다. 문자열에 숫자 및 공백이 포함되어 있으면 False를 리턴한다.

숫자인지 확인하기(isdigit)

문자열의 구성이 모두 숫자인지 확인하는 방법이다. 위와 동일하게 이 메소드의 리턴값도 boolean형태이다. 마이너스 '-' 나 소수점'.' 은 문자로 판단하기 때문에 음수나 실수는 판단이 불가능하다.

알파벳 또는 숫자인지 확인하기(isalnum)

주어진 문자열이 알파벳+숫자로만 구성되어 있는지 판별한다. 알파벳이나 숫자 둘 중 하나로만 구성되어 있어도 True를 반환하고, 공백이 있으면 False를 반환한다.

문자열 슬라이싱

슬라이싱(Slicing)은 인덱스에 해당하는 데이터 값을 불러오기 위한 영역을 지정하는 것이다.
지정한 영역만큼 잘라서 값을 추출하는 것이라 볼 수 있다.

  • 문자열[:] 을 하면 문자열[시작:끝] 과 같으며, 이것은 문자열을 앞에서부터 하나씩 슬라이싱 해서 새로운 문자열을 만드는 것이다.

  • 그리고 문자열[시작:끝:규칙]으로 세 번째 숫자가 들어갈 수 있는데, 이때의 규칙은 슬라이싱을 하는 규칙입니다.
    여기에 1이 들어가는 것이 디폴트 값이며 1이 들어가게 되면 문자열을 앞에서부터 하나씩 잘라서 새로운 문자열을 만드는 것이다.

    • 2가 들어가게 되면 앞에서부터 한 칸씩 띄워서 2씩 잘라주어 새로운 문자열을 만든다.
      인덱스를 기준으로 보면 [0], [2], [4] .. 이런 식으로 문자열을 자른다.

이 규칙에 -1을 넣어서 뒤에서부터 잘라서 문자열을 뒤집을 수 있다.

문자열 정렬

  • sorted(arr) : arr 배열을 변형하지 않고, arr 배열이 오름차순으로 정렬된 새로운 배열을 반환한다.
  • arr.sort() : arr 배열을 오름차순으로 변형하고 반환하지는 않는다.
  • 옵션 매개변수 reverse(필요에 의해 사용하는)가 존재
    • 기본값은 reverse = False (오름차순) 이고 필요에 의해 reverse = True (내림차순) 로 작성해 사용하면 된다.

파이썬에서 사전순으로 문자열들을 정렬하기는 쉽다. sort()를 사용하면 정렬이 된다. sorted()를 사용하면 원본 리스트를 변경하지 않고 정렬이 가능하다.

a = ['cd', 'ef', 'ab']

a.sort()
print(a)	# ['ab', 'cd', 'ef']

s="adfe"라는 문자열을 정렬해서 "adef"로 만들려고 한다.

s = "adfe"

s1 = s.sort()			# wrong
s2 = sorted(s)			# ['a','d','e','f'] 
s3 = ''.join(sorted(s))		# "adef"

2차원 배열 정렬

2차원 배열은 원하는 Key 값을 이용해 정렬을 할 수 있다.

  • sorted(배열명, key=lambda x:x[n]) : n번째 요소를 기준으로 정렬
  • 배열명.sort(key=lambda x:x[n]) : n 번째 원소를 기준으로 정렬
## sorted() 사용

student_score = [['임천재', 100],['김천재', 96],['박바보',24],['임바보',22],['김바보',26],['박천재',90]]

# 이름을 기준으로 정렬 : x[0]
sorted_list = sorted(student_score, key=lambda x:x[0])
print(sorted_list)
# [['김바보', 26], ['김천재', 96], ['박바보', 24], ['박천재', 90], ['임바보', 22], ['임천재', 100]]

# 성적을 기준으로 정렬(오름차순) : x[1]
sorted_list = sorted(student_score, key=lambda x:x[1])
print(sorted_list)
# [['임바보', 22], ['박바보', 24], ['김바보', 26], ['박천재', 90], ['김천재', 96], ['임천재', 100]]

# 성적을 기준으로 정렬(내림차순) : x[1]
sorted_list = sorted(student_score, key=lambda x:x[1], reverse=True)
print(sorted_list)
# [['임천재', 100], ['김천재', 96], ['박천재', 90], ['김바보', 26], ['박바보', 24], ['임바보', 22]]

---------------------------------------------------------------------------------------------------

## sort() 사용

student_score = [['임천재', 100],['김천재', 96],['박바보',24],['임바보',22],['김바보',26],['박천재',90]]

# 기본 값 : 각 배열의 가장 첫번째 요소를 기준으로 정렬함
student_score.sort()
print(student_score) 
# [['김바보', 26], ['김천재', 96], ['박바보', 24], ['박천재', 90], ['임바보', 22], ['임천재', 100]]

# 이름으로 정렬 : x[0] 요소 기준
student_score.sort(key = lambda x:x[0])
print(student_score)
# [['김바보', 26], ['김천재', 96], ['박바보', 24], ['박천재', 90], ['임바보', 22], ['임천재', 100]]

# 점수로 정렬(오름차순) : x[1] 요소 기준
student_score.sort(key = lambda x:x[1])
print(student_score)
# [['임바보', 22], ['박바보', 24], ['김바보', 26], ['박천재', 90], ['김천재', 96], ['임천재', 100]]

# 점수로 정렬(내림차순) : x[1] 요소 기준
student_score.sort(key = lambda x:x[1], reverse=True)
print(student_score)
# [['임천재', 100], ['김천재', 96], ['박천재', 90], ['김바보', 26], ['박바보', 24], ['임바보', 22]]

만약, 정렬하려는 key값이 동일한 경우는 (정렬 key 사용하지 않을 때 : sort()만 사용) 자동적으로 그 다음 키 값에 따라 정렬한다.

  • 배열명.sort(key=lambda x:(x[n],x[n+2])) : n 번째 원소를 기준으로 정렬, 같으면 다음 기준은 n+2번째 원소
profile
전공 소개

0개의 댓글