문자열은 말 그대로 문자로 열을 만든, 문자로 열을 세운 자료형이다.
가끔 오해하는 경우가 있는데 문자열 또한 엄연한 자료형
이다!
문자열은 immutable(변경 불가능)이다!
1.문자열 슬라이싱
2.문자열 메서드
3.아스키(ASCII) 코드
문자열의 특징:
-
문자열은 변경 불가능한(immutable) 자료형이다.
-
순회가 가능하다 (iterable)
word = 'apple'이라고 하면 apple의 주소를 할당하는 것이다.
word = 'apple'
print(word) # apple
print(id(word)) # 1352749370800
word += 'banana'
print(word) # apple banana
print(id(word)) # 1352749417520
문자열 원문인 apple에 banana를 추가하면 주소값이 달라지는 것을 알 수 있다. 즉, 주소가 달라짐으로 인해 기존의 'apple' 문자열과는 별개로 새로운 문자열 하나가 생긴 것을 확인하였다.
아래와 같은 문자열이 있다.
s = 'abcdefghi'
s[2:5]로 문자열을 슬라이싱 할 경우 결과는 cde
이다.
참고로 슬라이싱을 해도 원본에는 변화가 없다.
s = 'abcdefghi' 에서 s[2:5]를 해도 s가 변한 것은 아니다.
s[-6:-2]로 문자열을 슬라이싱 할 경우 결과는 'defg'이다.
len(s) = 9, s[-6+len(s):-2+len(s)] == s[3:7] == s[-6:-2] 가 된다!
s[2:5:2] = > ce
s[-6:-1:3] => dg
s[2:5:-1] => '' 왜 공백일까?: 먼저 range가 2부터 시작하여 5까지이고 step이 -1이다. step을 적용할 경우 2, 1, 0 ... 식으로 쭉 이어지게 되는데 이는 5의 정 반대방향이므로 불가능하다. 따라서 결과는 ''이다.
s[5:2:-1] => fed
.split()
: 문자열을 일정 기준으로 나누어서 리스트로 반환한다.
아무것도 넣지 않으면 자동으로 공백을 기준으로 나누고 반환한다.
-
.strip()
: 문자열의 "양쪽 끝"에 있는 특정 문자를 모두 제거한 후에 새로운 문자열을 반환한다. 아무것도 넣지 않으면 자동으로 공백을 제거 문자로 설정하고 반환한다. -
.find()
: 특정 문자가처음으로
나타나는 위치(인덱스)를 반환한다. 찾는 문자가 없다면 -1을 반환한다. -
.index()
: 특정 문자가처음으로
나타나는 위치(인덱스)를 반환한다. 찾는 문자가 없다면 "오류"가 발생한다. -
find()
메서드와index()
메서드의 설명이 굉장히 비슷하다. 왜 그럴까?
- find의 경우 끝까지 실행이 되고 index의 경우 도중에 오류가 발생하여 중단된다.
뭔가 문제가 발생하였을 때 개발자의 입장에서 에러가 발생하는 것이 문제가 무엇인지 확인하고 해결하는데에 도움이 되기 때문에 에러가 발생하는 것이 더욱 좋은 경우도 있다.
-
.count()
: 문자열에서 특정 문자의 갯수를 반환 -
.replace(기존문자, 새로운문자)
: 문자열에서 기존 문자를 새로운 문자로 수정한 새로운 문자열을 "반환"한다. 특정 문자를 빈 문자열("")로 수정하여마치 해당 문자를 삭제한 것 같은 효과
를 낼 수도 있다. -
삽입할문자.join(iterable)
: iterable의 각각 원소 사이에 특정 문자를 삽입한 새로운 문자열을 "반환"한다. 공백 출력, 콤마 출력 등 원하는 출력 형태를 위해 사용이 가능하다.
아스키 코드에 대해 알아보자.
-
ASCII(American Standard Code for Information Interchange): 미국 정보교환 표준부호
-
모든 알파벳을 숫자로 변환할 수 있다! 알파벳을 표현하는 대표 인코딩 방식
-
각 문자를 표현하는데 1byte(8bit)를 사용한다.
-
1bit: 통신에러 검출용
-
7bit: 문자 정보 저장용 (총 128개)
-
아래와 같이 문자를 아스키 코드로 변환, 아스키 코드를 문자로 변환이 가능하다.
-
ord(문자) => 문자를 아스키 코드로 변환해준다.
ord('A')
== 65 -
chr(코드) -> 아스키 코드를 문자로 변환해준다.
chr(65)
== 'A'