[python] 파이썬 데이터 타입 - String
파이썬 데이터 타입 - String
Python Data Type
- 숫자형 (number)
- 문자열 (string)
- 리스트 (List) : 파이썬에서는 순수 배열이 없다. #자바에서 Arraylist와 유사한 형태가 바로 파이썬 list
- 튜플 (tuple) : 자바에는 없는 존재
- 딕셔너리 (dictionary) : key와 value가 쌍으로 구성이 되어 있는것. #자바에서 해쉬맵과 같은 형태
- 집합 (Set) : 자바에서 Set과 유사
- 논리형 (bool) : True와 False가 있다. true와 false가 아니다. 첫글자는 무조건 대문자!
- 날짜 (date)
2. 문자열 (string)
a = 'Hello World'
b = "Hello World"
c = "Hello\nWorld" # 여러줄에 걸친 문자열을 만들고 싶을 때 (자바에서는 이스케이프 문자(\n)를 사용) #개행문자를 이용
print(c)
# 결과값 : Hello
World
d = """
Hello
World
여러줄에 걸친 문자열
""" # """ 주석 """ <- 주석처리인데 문자열에서 안에 내용을 넣어 변수에 저장할 수 있다.
print(d) # 이럴땐 주석이 아닌 또다른 문자열을 만들어 내는 방법이다.
# 결과값 : Hello
World
!!!
문자열에 대한 “+ 연산” 부연 설명
- 일반적인 문자열의 연결은 “+” 기호를 이용한다.
first = "This is a" middle = " sample" last = " Text." print(first + middle + last) # 결과값 : This is a sample Text.
first = "This is a" middle = " sample" last = " Text." a = 100 result = first + a # 파이썬에서는 문자열과 숫자를 "+" 할 수 없다. # 자바에서는 문자+숫자는 숫자가 문자로 바뀌어 합쳐진다. 그러나 파이썬에서는 불가능 print(result) # 결과값 : 역시 아래와 같이 오류 발생. --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-3-76ae67548cd9> in <module> 8 9 a = 100 ---> 10 result = first + a 11 #result = first + str(a) #str() 안에 들어온 것을 문자열로 바꾸는 함수 12 print(result) TypeError: must be str, not int
first = "This is a" middle = " sample" last = " Text." a = 100 result = first + str(a) # str() : 문자열로 변환 #str() 안에 들어온 것을 문자열로 바꾸는 함수 print(result) # 결과값 : This is a100
문자열에 대한 “* 연산” 부연 설명
text = "python!"
result = text * 3 # text+text+text와 같은 의미이다.
print(result)
# 결과값 : python!python!python!
문자열 indexing #배열처럼 쓸 수 있다.
str = "Talk is a cheap. Show me the Code"
print(str[0]) # 0번째 index의 값을 알아오는것.
# 결과값 : T
print(str[5])
# 결과값 : i
print(str[-1]) # 맨뒤에서 첫번째 문자를 가져온다. #자바에서는 불가능
# 결과값 : e
print(str[-4])
# 결과값 : C
문자열 slicing (즉 서브문자 가져오기)
str = "Talk is a cheap. Show me the Code"
result = str[0:4] #0번째에서 3번째까지 총 4개 가져오기
# [idx1:idx2]
# idx1 = inclusive(포함)
# idx2 = exclusive(불포함)
result = str[5:] #idx2가 없으면 N부터 끝까지
result = str[:10] #idx1가 없으면 처음부터 N까지
result = str[:] #둘다 없으면 처음부터 끝까지 다 가져오기
print(result)
# 결과값 : Talk is a cheap. Show me the Code
문자열 안에 연산자
str = "Talk is a cheap. Show me the Code"
print("cheap" in str) # str 안에 해당 문자열("cheap")이 있니 없니? 결과값 있으면 True가 나온다.
# 결과값 : True
print("Cheap" in str) # str 안에 해당 문자열("Cheap")이 있니 없니? 결과값 없으면 False가 나온다.
# 결과값 : False
print("Cheap" not in str) # str 안에 해당 문자열("Cheap")이 없다면 결과값은 True 있다면 False가 나온다.
# 결과값 : True
문자열 formatting (%d, %f, %s)
amount = 10 # %f : 실수
str = "나는 사과 %d개가 있어요." %amount # %d : 정수 # %뒤에 변수나 함수를 쓰면 인자값이 들어간다. 숫자만
str = "나는 사과 %s개가 있어요." %"다섯" # %s : 문자열 # %뒤에 변수나 함수를 쓰면 인자값이 들어간다. 문자만
# 길어졌을 때 다음줄과 이어서 쓰려면 역슬래쉬(\)를 쓴다.
# 인자값 2개 있을시 %뒤에 괄호를 쓰고 콤마를 쓴다. (N,M)
str = "나는 사과 %d개, 참외%d개 있어요."\
%(3, 5)
# 만약 %문자를 그대로 출력하려면 %% 2개를 써서 사용.
str = "공장 가동률은 %d%%입니다." %95
# %숫자d의 숫자는 자리의 개수
# 숫자가 양수면 오른쪽 정렬, 음수면 왼쪽 정렬
str = "나는 사과 %10d개가 있어요." %10 #총 10자리를 확보 후 우측 정렬
str = "나는 사과 %-10d개가 있어요." %10 #총 10자리를 확보 후 좌측 정렬
str = "원주율은 %f입니다." %3.1415926535 # 3.141593
str = "원주율은 %.3f입니다." %3.1415926535 # 소수점 셋째자리까지 # 넷째자리에서 반올림처리 후 3.142
print(str)
# 결과값 : 원주율은 3.142입니다.
문자열 함수 type()
str = "hello"
print(type(str))
# 결과값 : <class 'str'>
# str의 데이터 타입을 출력 #클래스 str의 인스턴스(객체로서)야 : type()
문자열 함수 dir()
str = "hello"
print(dir(str))
# 내장함수 중 dir()
# 해당 인스턴스(개체)가 갖고 있는 필드와 메소드를 사용할 수 있는지 알려준다.
# 객체가 가지고 있는 property와 #method를 리스트로 리턴
# 결과값 : ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
문자열 함수 .count .find .index
str = "cocacola"
result = len(str) # 인자로 들어오는 것의 개수를 count
result = str.count("c") # 인자로 들어온 문자열이 몇개 있는지를 count (= str 안에 "c"의 문자 개수를 count)
result = str.find("c") # 인자로 들어온 문자열이 맨 처음 나타나는 위치(index)를 리턴 # 0이 나온다 이유는 숫자는 0부터 시작하니
result = str.find("o") # 인자로 들어온 문자열이 맨 처음 나타나는 위치(index)를 리턴 # 1이 나온다 이유는 숫자는 0부터 시작하니
result = str.find("ca22") # 인자로 들어온 문자열이 맨 처음 나타나는 위치(index)를 리턴 # 찾지 못하면 -1 return
#result = str.index("ca44") # find()와 동일한데 찾지 못하면 에러 발생
문자열 함수 .join
a = "-"
b = "abcdef"
result = a.join(b)
print(result)
# 결과값 : a-b-c-d-e-f
# 각각의 문자열 사이사이에 내가 원하는 특수기호를 넣고 싶을 때 사용한다.
문자열 함수 .upper .lower .strip
str = " Hello World "
print(str.upper()) #문자열 대문자로 변환
# 결과값 : HELLO WORLD # 공백발생
print(str.lower()) #문자열 소문자로 변환
# 결과값 : hello world # 공백발생
print(str.strip()) #문자열의 양쪽 공백 제거
# 결과값 : Hello World # 양쪽 공백 제거
문자열 함수 .replace .split
- 문자열은 기본적으로 불변의(immutable) 특성이 있다.
- 함수를 적용해도 원본 문자열은 변하지 않는다.
str = "Show me the Code"
result = str.replace("Code", "Money")
print(result) # 원래 문자열 Code가 바뀐게 아니라 결과값만 변한 것이다라고 생각하기.
# 결과값 : Show me the Money
print(str)
# 결과값 : Show me the Code
str = "Show me the Code"
result = str.split() #list로 결과 return # 아무값도 안 넣으면 defualt 공백을 기준으로 나눈다.
print(result)
# 결과값 : ['Show', 'me', 'the', 'Code']
str = "a::b::c::d::e"
result = str.split("::") #list로 결과 return # "::" 값을 넣으면 :: 값을 기준으로 나뉜다.
print(result)
# 결과값 : ['a', 'b', 'c', 'd', 'e']
문자열 함수 .format
- python에서 일반적으로 사용되는 문자열
- 아래와 같이 해도 되지만 formatting method를 쓰자.
str = "나는 사과 %d개 있어요!!" %5 print(str) # 결과값 : 나는 사과 5개 있어요!!
문자열 함수. formatting method .format(인자값)
str = "나는 사과 {0}개 있어요!!".format(3) # 중괄호 안에 인덱스를 넣어도 안 넣어도 됨 ex) {} or {0}
str = "나는 사과 {}개 있어요!!".format(3)
print(str)
# 결과값 : 나는 사과 3개 있어요!!
str = "나는 사과 {0}개, 바나나 {1}개 있어요!!".format(5, 3) #중괄호 안에 인덱스를 넣어도 안 넣어도 됨.
str = "나는 사과 {}개, 바나나 {}개 있어요!!".format(5, 3)
print(str)
# 결과값 : 나는 사과 5개, 바나나 3개 있어요!!
str = "나는 사과 {num1}개, 바나나 {num2}개 있어요!!".format(num1=5, num2=3) # 변수값 num1, num2을 넣을 수도 있다.
str = "나는 사과 {num1}개, 바나나 {num2}개 있어요!!".format(num2=3, num1=5) # 변수값 num1, num2을 넣을 수도 있다.
print(str) # 변수값을 지정했기 때문에 순서 상관 없다.
# 결과값 : 나는 사과 5개, 바나나 3개 있어요!!
str = "원주율은 {0}입니다.".format(3.141592)
str = "원주율은 {0:0.3f}입니다.".format(3.141592) #앞의 0는 순번, 0.3f는 소수점 세자리까지
print(str)
# 결과값 : 원주율은 3.142입니다.
천단위마다 “,” 출력
num = 1234567890
str = "{0}".format(num)
print(str)
# 결과값 : 1234567890 모두 출력
num = 1234567890
str = "{0:,}".format(num)
print(str)
# 결과값 : 1,234,567,890
백분율 처리(반올림 처리 가능)
num = 0.87356
str = "{0:.0%}".format(num)
print(str)
# 결과값 : 87%
num = 0.87356
str = "{0:.2%}".format(num)
print(str)
# 결과값 : 87.36%
References
개발자님들 덕분에 많이 배울 수 있었습니다. 감사의 말씀 드립니다.