[AIVLE SCHOOL] 데이터 다루기(2) - 문자열 자료형

춤추는 머쉬룸·2024년 9월 4일

AIVLE SCHOOL 6기

목록 보기
3/80
post-thumbnail

9/4 5, 6, 7세션 - 9/5 2세션

A. 문자열 자료형

  • 블럭 지정 후 ' 를 하면 자동으로 앞 뒤에 ' 붙음 (Auto Close Brackets)

A-1. 문자열 길이

  • len(문자열) : 문자열의 길이를 반환

A-2. 문자열 나열

  • 문자열을 콤마 없이 나란히 나열하면 공백 없이 합쳐진 결과가 나옴
  • s = 'hello', 'world' -> print(s) => helloworld

A-3. 콤마로 구분해 나열

  • 튜플이 된다.

# 콤마로 구분해 나열
s = 'hello', 'world'

# 확인
print(s) 

# 답 : ('hello', 'world')

괄호를 안쓰면 소괄호가 생략된 것임

A-4. 여러줄의 문자열

  • 따옴표 3개를 연속으로 사용
s1 = """안녕하세요
저는 안녕입니다.
반갑습니다."""

A-5. 문자열 안에 따옴표 넣기

  • 큰 따옴표 안에 작은 따옴표, 또는 작은 따옴표 안에 큰 따옴표 사용
  • \' 또는 \"를 사용
  • \ 넣기 : \\

B. 문자열 연산

  • 문자열 + 문자열 : 문자열 결합
  • 문자열 * 양의 정수 : 문자열 반복
  • 문자열 * > 0 : 반복 없음
  • 문자열 * 실수 : Error

B-1. format 형식

방법 1

'이름:{}, 과목:{}, 점수:{}'.format('홍길동', '국어', 90)

# '이름:홍길동, 과목:국어, 점수:90'

방법 2

# 변수 선언
name = '홍길동'
year = 2019
perf = 2345.6789

# 출력
print('이름:{}, 연도:{}, 실적:{}'.format(name, year, perf))
print('이름:{0}, 연도:{1}, 실적:{2:.2f}'.format(name, year, perf))
print('이름:{}, 연도:{}, 실적:{:,.2f}'.format(name, year, perf))

{2:.2f} : 반올림 하여 소수점 2자리까지 표현
{:,.2f} : 천 단위 ',' 를 찍고, 반올림 하여 소수점 2자리까지 표현 (앞의 2는 생략 가능)

B-1-1. 자리수 지정

# 기본 정렬
print('[{0:10}] [{1:6}]'.format('홍길동', 1200))

# 오른쪽, 왼쪽 정렬
print('[{0:>10}] [{1:<6}]'.format('홍길동', 1200))

# 가운데 정렬
print('[{0:^10}] [{1:^6}]'.format('홍길동', 1200))

# 공백을 다른 문자로 채우기
print('[{0:-^10}] [{1:_^6}]'.format('홍길동', 1200))

결과 : [---홍길동----] [_1200_]

B-2. f-string 형식


# 변수 선언
name = '홍길동'
age = 25
score = 2345.6789

# 확인
print(f'이름: {name}')
print(f'나이: {age}')
print(f'점수: {score}')
print(f' {age}살의 {name}의 점수는 {score}입니다.')

print(f' {age}살의 {name}의 점수는 {score:,.2f}입니다.')
  • 중괄호 안에는 값이 1개만 들어가야 함
  • 중괄호 안에 값을 여러개 넣으면 ()가 생략된 것이 되고, 튜플로 간주됨

C. 인덱스와 슬라이싱

  • 순방향은 0부터 시작
  • 역방향은 -1부터 시작 (-1은 무조건 제일 마지막 번호)

C-1. 슬라이싱

n[시작 인덱스 : 끝 인덱스 + 1]


s[0:4] : 첫 번째 문자부터 네 번째 문자까지 (s[0]부터 s[3] 까지)
s[7: ] : 7번째부터 끝까지
  • 앞 생략 [:n] : 0번부터 뒷 숫자의 전 문자까지
  • 뒤 생략 [n:] : 시작 숫자부터 맨 마지막까지

인덱싱, 슬라이싱으로 문자를 변경하는 건 불가능
문자열은 변경 불가능한 데이터 형식

TIP!
변수의 고유 아이디 확인 : id(변수명)
문자열을 같은 변수명으로 여러번 선언하면, 다른 주소에 선언되는 것임
replace() 를 사용해도 마찬가지임

C-2. 문자열 메소드

  • s.upper() : 대문자로 바꿔서 보여줌. s 가 직접 바뀐 것이 아니라, 출력 시에만 대문자로 보여주는 것

변수에 반영하는 방법

s = s.upper()
print(s)

TIP! 메소드와 함수는 다르다!

1) 대소문자 변환

  • capitalize() 메서드: 문자열 첫 문자만 대문자, 나머지 모두 소문자로 변환
  • title() 메서드: 단어들의 첫 문자만 대문자, 나머지는 모두 소문자로 변환
  • upper() 메서드: 모든 문자를 대문자로 변환
  • lower() 메서드: 모든 문자를 소문자로 변환

2) 자릿수 지정과 정렬

  • rjust(x) 메서드: 지정한 x 만큼의 자릿수를 확보한 후 오른쪽 정렬
  • ljust(x) 메서드: 지정한 x 만큼의 자릿수를 확보한 후 왼쪽 정렬
  • center(x) 메서드: 지정한 x 만큼의 자릿수를 확보한 후 가운데 정렬

3) 일부 변경 및 제거

  • replace(x, y) 메서드: 문자열에 포함된 일부 문자열 x를 문자열 y로 변경
  • strip(x) 메서드: 문자열에서 양쪽의 공백 또는 특수 문자를 제거. 가운데 있는 공백이나 특수 문자는 제가 불가.

# 문자열 변경('now' --> 'now ')
s = 'nowhere'
s.replace('now', 'now ')

결과 : 'now here'

# 앞 뒤 빈 문자열, 특수 문자 제거
print('  world '.strip())
print('#world#$$#'.strip())
print('#world#$$#'.strip('$#'))

결과 : 
world
#world#$$#
world

4) 분리와 연결

  • split(x) 메서드: x 문자를 구분자로 하여 문자열을 분리하여 리스트로 변환 (공백, \n 등 화이트 스페이스가 기본 구분자)

  • 리스트 인덱싱으로 개별 값을 변수에 대입 가능

# 문자열 변수
> s = '2020-09-14'

# 문자열 분리
> year = s.split('-')[0]
> month = s.split('-')[1]
> day = s.split('-')[2]
  • x.join(s) 메서드: x를 구분자로 하여 요소들을 연결한 문자열로 변환
# 중간에 특정 문자열 삽입
> s = 'PYTHON'
> s1 = '/'.join(s)

> print(s1)
P/Y/T/H/O/N
# 요소를 연결해서 문자열로
> a = ['홍길동', '한사랑', '강우동', '박여인']
> s = '/'.join(a)

> print(s)
홍길동/한사랑/강우동/박여인

예제 1 리스트의 요소를 모두 대문자로 바꾸기

# 리스트 만들기
> a = ['h', 'a', 'p',  'p', 'y']

# 대문자로 변경
> a = "/".join(a).upper().split("/")
> a

['H', 'A', 'P', 'P', 'Y']

기타

사용 가능한 메서드 확인

dir(변수명)

0개의 댓글