문자열
- 문자열 관리
* 파이썬은 문자열을 기본 타입으로 지원하고 문자열 조작을 위한 다양한 명령 제공
* 첨자는 앞에서 셀 수도 있고 뒤에서 셀수도 있음
* 앞에서 셀 때는 0부터 시작하여 1씩 증가
* 뒤에서 셀 때는 -1부터 시작하여 1씩 감소
* 문자열은 문자로 구성된 리스트(Collection) 의 일종이므로 for문으로 순회 가능
* Immutable하다 (변경 불가능) : 개별 문자를 읽을 수 있지만, 다른 문자를 대입/삽입/삭제 불가 (메모리 절약 및 속도 개선)
-슬라이스(Slice)
[begin:end:step]
* 부분 문자열 추출
* 괄호 안에 [ 시작, 끝, 증가값 ] 지정 : range함수와 같은 구조
- 슬라이스 예제
* 추출된 문자열은 원본 문자열과는 별개
s = 'python'
print( s[2:5] ) # tho
print( s[3: ] ) # hon
print( s[:4] ) # pyth
print( s[2:-2] ) # th
- 검색 메소드
s = "python programming"
print(len(s)) # 문자열의 길이
print(s.find('o')) # 문자 또는 부분 문자열의 위치를 앞에서부터 조사. 없으면 -1
print(s.rfind('o')) # 문자 또는 부분 문자열의 위치를 뒤에서부터 조사. 없으면 -1
print(s.index('r')) # 문자 또는 부분 문자열를 찾음. 없으면 예외 발생.
print(s.count('n')) # 특정 문자의 개수 세기
* 결과) 위에서 부터 18, 4, 9, 8, 2
- 조사 메소드
함수 | 설명 |
startswith('a') | 문자열이 a로 시작하는지 확인 |
endswith('a') | 문자열이 a로 끝나는지 확인 |
isalpha | 모든 문자가 알파벳인지 확인 |
islower | 모든 문자가 소문자인지 확인 |
isupper | 모든 문자가 대문자인지 확인 |
isdigit | 모든 문자가 숫자인지 확인 |
capitalize | 문장의 첫 글자만 대문자로 변경 |
lstrip / rstrip / strip | 각각 왼쪽/오른쪽/양쪽 공백을 제거 |
swapcase | 대소문자를 반대로 뒤집음 |
* 함수를 이용하여 문자열을 바꿔도 문자열 자체가 변경되지는 않음 (Immutable : 한번 초기화되면 이후에 바뀌지 않음)
* 만약 문자열 자체를 변경하고 싶다면 리턴하는 값을 변수에 다시 대입
- 분할 메소드
str = "안녕 나는 토끼야 반가워"
#구분자를 기준으로 문자열 분할
print( str.split() ) # ['안녕', '나는', '토끼야', '반가워']
- 문자열 포맷팅
%[-]폭[.유효 자리수]서식기호
* %와 서식 기호 사이에 전체 폭, 정렬방식, 유효 자리수 등의 상세한 지시사항 설정
* 유효자리수는 별다른 지정이 없으면 소수점 이하 6자리까지 반올림하여 표시
"... {} ... {}... {} ...".format(param1, param2, param3...)
* 파이썬2.6 이후부터 새롭게 지원하는 문자열 포맷팅 방법
* 정보를 삽입할 위치에 {}괄호를 적고 format 메소드의 인수로 삽입할 변수 나열
리스트
- 리스트: 자료의 집합
리스트명 = [ 요소1, 요소2, 요소3, 요소3, ... ]
* 여러 개의 값을 집합적으로 저장
* [ ]괄호 안에 콤마로 요소를 나열하며 초기화
* 리스트 하나에 다른 타입의 값을 섞어서 저장하는 것도 가능하나 실용성이 떨어져 많이 사용하지는 않음
- 리스트의 요소
* 리스트의 개별 요소를 읽을 때는 읽고자 하는 요소의 순서 값을 출력
* 요소의 순서값을 매기는 방법은 문자열과 같고 첨자가 범위를 벗어나면 에러 처리
* 문자열은 immutable하지만 리스트는 mutable 하다 (변경 가능하다!)
- 리스트 예제1
list = [[1,2,3], [4,5], [6,7,8,9]] # 리스트의 요소로 리스트가 올 수 있음
print(list[0]) # [1,2,3]
print(list[2][1]) # 7
- 리스트 예제2
num = [n * 2 for n in range(1, 11)] # 1~10의 반복을 돌면서 그 값에 2를 곱함
for i in num:
print(i, end=' ') #2 4 6 8 10 12 14 61 81 20
- 리스트 삽입
list = [1, 2, 3, 4]
list.append(5) # 리스트 마지막에 5 추가
list.insert(2, 99) # 리스트의 2번째 위치에 99 추가
print(list) # [1, 2, 99, 3, 4, 5]
list2 = [10, 11, 12]
list.extend(list2) # list 뒤에 list2를 붙임
print(list) # [1, 2, 99, 3, 4, 5, 10, 11, 12]
- 리스트 삭제
list = [10, 20, 30, 40 ,50]
list.remove(20) # 20 삭제
del(list[2]) # 리스트의 2번째 요소 삭제
print(list) # [10, 30, 50]
print(list.pop()) # 마지막 요소를 지우면서 리턴
- 리스트 검색
list = [1, 2, 3, 4, 3]
print(list.index(1)) # 2 특정요소의 인덱스값 반환
print(list.count(3)) # 2 특정요소값의 개수 조사
print(len(list)) # 5 리스트 길이
print(max(list)) # 4 리스트 요소 중 최대값
튜플
- 불변 자료 집합 ( Immutable collection )
- 튜플 표현 시 요소를 ()괄호로 감싸거나 감싸지 않음
- 리스트와 유사하나 튜플은 다른 타입을 묶는 집합으로도 흔히 사용
- 요소가 하나일 경우 일반 변수와의 구분을 위해 ',' 를 찍음
- 요소 연결이나 반복은 튜플을 바꾸는 것이 아니라 원본 튜플로부터 새로운 튜플을 만드는 것
- 제공하는 메소드는 index, count 두 개밖에 없음 (리스트의 append, insert같은 메소드 없음)
- 여러 개의 변수에 값을 한꺼번에 대입 가능 (Tuple Unpacking)
tuple = (10, 20, 30, 40)
for i in tuple:
print(i, end=' ') #10 20 30 40
t = 2, # 요소가 하나인 튜플
v = 2 # 일반 변수
v2 = (2) # 괄호로 감싸도 일반 변수로 취급
print(t) # (2,)
print(v) # 2
print(v2) # 2
- Tuple Unpacking
import time
def getTime():
now = time.localtime()
return now.tm_hour, now.tm_min # 두 개의 값 리턴
result = getTime() # result는 튜플이 됨
print(result[0], result[1]) # 시, 분 출력
d, m = divmod(7, 3) # 몫, 나머지의 값을 튜플로 반환하는 내장 함수
print(d, m) # 2 1
- 튜플을 사용하는 이유 (튜플로 가능한 일은 리트로도 모두 가능하다)
* 비용의 차이
리스트: 변경을 위한 추가적인 기능 구현이 되어있으므로 많은 메모리 사용과 느린 속도
튜플: 요소의 집합만 표현하고 바뀌지 않으므로 내부구조가 단순하고 빠른 속도
* 튜플은 한번 정해지면 절대 바뀌지 않으므로 실수할 위험이 없지만 리스트는 실수나 사고로 값이 바뀔 수 있다.
따라서 db에서 읽어오거나 네트워크에서 받는 정보는 튜플로 받는 것이 안전
'Study > Python' 카테고리의 다른 글
[Python #5] Class, Module, Package (0) | 2021.10.31 |
---|---|
[Python #5] Dictionary, Set, Collection (0) | 2021.10.10 |
[Python #4] File (0) | 2021.10.07 |
[Python #2] Loop & Function (0) | 2021.09.23 |
[Python #1] 파이썬 기본 구조 (1) | 2021.09.23 |