문자열 (STRING)
문자열 선언 방식
- 1. 큰따옴표로 양쪽을 둘러싸는 방식 “hello”
- 2. 작은 따음표로 양쪽을 둘러싸는 방식 ‘hell’
- 3. 큰따옴표 3개를 연속으로 양쪽 둘러싸기 “”“hello hell”””
- 4. 작은따옴표 3개 연속 양쪽 둘러싸기 ‘’’hello hell’’’
큰,작은 따옴표가 활용되는 이유는 문장 사이에 따옴표가 사용될 때 다른 따옴표를 통해 문자열을 선언할 수 있기 때문이다.
다른 방법으로는 백슬래시를 앞에 추가하여 사용할 수 있다.
ex) ‘ Python\’s very easy’
여러 줄의 문자열을 변수에 대입하기
- \n을 활용하기
- ‘’’ ‘’’, “”” “””를 사용하기 줄을 구분하여 저장 가능하게 한다.
이 때 백스페이스를 활용하여 코드를 사용하는 것을 이스케이프 코드라고 한다.
\r, \n, \a, \f .. 등등
문자열 연산
- 더하기를 통한 연산 head = ‘a’ / tail = ‘b’ => head + tail = ‘ab’
- 곱하기를 통한 연산 head = ‘ab’ => a * 3 = ‘ababab’
- 문자열 길이 구하기 head = ‘abc’ => len(head) = 3
문자열 인덱싱
0부터 시작하여 해당 자리에 대한 문자 번호를 나타낸다.
변수[ index ] = 해당 자리의 문자값을 반환한다
여기서 -는 뒤에서 부터 읽어옵니다. 이 경우에는 -1부터 시작한다. a[0] == a[-0]
문자열 슬라이딩
문자열을 쪼개서 나타낸다.
ex) A = ‘life is what the fuck” A[0:4] => life
여기서 문자열의 요소값은 바꿀 수 있는 값이 아니다 (immutable한 자료형)
슬라이싱을 통해 수정이 가능하긴 하다.
(ex) A[:1] + ‘y’ + a[2:]
파이썬의 대부분은 객체로 그 속성이 mutable 과 immutable로 구분된다.
immutable = 숫자, 문자열, 튜플
mutable = 리스트, 딕셔너리, numpy 배열
immutable은 변경 불가능한 객체로 값이 변경되는 것이 새로운 객체 생성을 의미해서 변경이 일어날 때 기존 객체는 변하지 않눈다.
mutable은 변경 가능한 객체로 값의 변경이 일어날 때 주소가 참조하는 값이 모두 변경되는 것을 확인 할 수 있다.
즉 immutable은 직접 값이 변경되는 deep copy이고, 반면 mutable은 shallow copy 즉 내부적으로 포인터만 복사를 적용한다.
이때 비교 연산자로 객체의 값과 포인터를 비교하는 것은 아래와 같이 분류할 수 있다.
is 내부적으로 유지하는 포인터 값을 비교한다.
== 구성하는 성분을 비교한다.
◾️불변객체(immutable)를 사용하는 이유는?
불변객체는 외부에서 임의로 내부의 값을 제어할 수 없기 때문에 객체의 자율성이 보장되고, 프로그램 내에서 변하지 않는 즉 고정된 부분이 많아짐으로써 프로그램 안정도를 높일 수 있다.
>>> a = "hello" >>> b = ["hello", "python"] a의 경우에는 문자열이기 때문에 불변객체로 'hello'라는 문자열 그 자체를 가리키고 있다. b의 경우는 가변객체로 [0]이 'hello'를 가리키는 주소를 포함하고 있고 [1]의 경우 'python'이라는 문자열을 가리키는 주소를 포함하여 객체를 가리키는 방향을 교체한다면 주소가 가리키는 내용 즉 객체를 변경 할 수 있다 |
문자열 포맷
- 기본 포맷
1.숫자 바로 대입
>>> “ I eat %d apples. “ %3 => I eat 3 apples
2. 문자열 숫자 바로 대입
>>> “ I eat %s apples.” %”five” => I eat five apples
3. 2개 이상의 값 넣기
>>> number = 10
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
- 포맷 코드 + 숫자
1. 정렬과 공백
>>> "%10s" % "hi"
10개의 문자열 공간에 대입되는 값을 오른쪽으로 정렬하고 앞의 내용은 공백으로 처리한다.
>>> "%-10s Jane" % "hi"
반대쪽으로 정렬하기 위해서는 -로 처리한다.
2. 소수점 표현하기
>>> "%0.4f" % 3.4213423 ==> '3.4213'
3.42134234를 소수점 네 번째 자리까지만 나타내고 싶은 경우에는 위와 같이 사용한다. 즉 여기서 '.'의 의미는 소수점 포인트를 말하고 그 뒤의 숫자 4는 소수점 뒤에 나올 숫자의. 개수를 말한다. 다음 예를 살펴보자.
>>> "%10.4f" % 3.42134234 ==> ' 3.4213'
위 예는 숫자 3.421342를 소수점 네 번째 자리까지 표시하고 전체 길이가 10개인 문자열 공간에서 오른쪽으로 정렬하는 예를 보여 준다.
- Format 함수를 사용한 포맷팅
1. 숫자 바로 대입하기
>>> "I eat {0} apples".format(3) ==> 'I eat 3 apples'
2. 문자열 바로 대입하기
>>> "I eat {0} apples".format("five") ==> 'I eat five apples'
3. 2개 이상 대입하기
>>> number = 10 >>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
'I ate 10 apples. so I was sick for three days.'
OR
>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
4. 정렬
1. 총 자릿수를 10개로 맞추고 왼쪽 정렬 >>> "{0:<10}".format("hi") 'hi '
2. 총 자릿수를 10개로 맞추고 오른쪽 정렬 >>> "{0:>10}".format("hi")
3. 총 자릿수를 10개로 맞추고 가운데 정렬 >>> "{0:^10}".format("hi")
> , ^ 앞에 문자를 설정하면 공백 대신 문자로 채워진다. >>> "{0:=^10}".format("hi") '====hi===='
5. 소수점 표현하기
>>> y = 3.42134234
>>> "{0:0.4f}".format(y) '3.4213'
>>> "{0:10.4f}".format(y) ' 3.4213'
- F string
다음과 같이 문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능을 사용할 수 있다.
>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.' '나의 이름은 홍길동입니다. 나이는 30입니다.'
또한 fstring은 표현식을 지원한다.
>>> f'나는 내년이면 {age+1}살이 된다.' '나는 내년이면 31살이 된다.'
딕셔너리 사용하기
d = {'name':'홍길동', 'age':30}
>>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.' '나의 이름은 홍길동입니다. 나이는 30입니다.'
정렬은 다음과 같이 할 수 있다.
>>> f'{"hi":<10}' # 왼쪽 정렬 'hi '
>>> f'{"hi":>10}' # 오른쪽 정렬 ' hi'
>>> f'{"hi":^10}' # 가운데 정렬 ' hi '
공백 채우기는 다음과 같이 할 수 있다.
>>> f'{"hi":=^10}' # 가운데 정렬하고 '=' 문자로 공백 채우기 '====hi===='
>>> f'{"hi":!<10}' # 왼쪽 정렬하고 '!' 문자로 공백 채우기 'hi!!!!!!!!'
소수점은 다음과 같이 표현할 수 있다.
>>> y = 3.42134234
>>> f'{y:0.4f}' # 소수점 4자리까지만 표현 '3.4213'
>>> f'{y:10.4f}' # 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤 ' 3.4213'
- 문자열 관련 함수
count = 문자 세기
find = 위치 알려주기 (인덱스)
join = 문자열 삽입
upper = 대문자 변환
Lower = 소문자 변환
Lstrip = 왼쪽 공백 제거
rstrip = 오른쪽 공백 제거
strip = 양쪽 공백 제거
'Tech Stack > Python' 카테고리의 다른 글
파일 (0) | 2021.07.27 |
---|---|
함수 (0) | 2021.07.26 |
반복문 ( for , while ) (0) | 2021.07.24 |
집합 & 불 자료형 (0) | 2021.07.21 |
튜플 & 딕셔너리 (0) | 2021.07.20 |