본문 바로가기
Study/Python

[Python #3] String, List & Tuple

by YOONAYEON 2021. 10. 5.
문자열 

 

 

- 문자열 관리

* 파이썬은 문자열을 기본 타입으로 지원하고 문자열 조작을 위한 다양한 명령 제공

* 첨자는 앞에서 셀 수도 있고 뒤에서 셀수도 있음

* 앞에서 셀 때는 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