파이썬에서 기본 자료형인 문자열 자료형을 살펴 본다.
str): 'a', 'abc', 'enginneering', ... 등등'abc' * 2, 'engineering' + 'math', 등등
In [1]:
hello = 'hello'
print( hello )
변수의 이름에 할당될 문자열과 동일할 필요는 물론 없다.
In [2]:
falafel = 'kebap'
print(falafel)
문자열의 덧셈은 이어붙이기이다.
In [3]:
print("kebap" + " and " + falafel)
문자열과 숫자를 곱하는 것은 반복해서 붙여주기이다.
In [4]:
"kebap" * 7
Out[4]:
In [5]:
7 * "kebap"
Out[5]:
문자열의 연산은 덧셈과 곱셈에 대해서만 정의되어 있다. 나눗셈, 뺄셈은 정의되어 있지 않다.
주의 문자열의 곱셈은 정수와의 곱셈만 가능하다.
In [6]:
"gyros"/"falafel"
In [7]:
"gyros" - "falafel"
In [8]:
"gyros" * "falafel"
문자열과 문자열이 할당된 변수들을 이용하여 새로운 문자열을 생성할 수 있다.
In [9]:
order = hello + ', I would like a ' + falafel + '.'
print(order)
In [10]:
order.capitalize()
Out[10]:
문자열의 특정 문자열로 끝나는 것을 확인해주는 endswith()라는 메소드도 있다.
In [11]:
order.endswith('bap.')
Out[11]:
In [12]:
order.endswith('bap')
Out[12]:
변경된 문자열을 새로운 변수에 저장이 가능하다.
In [13]:
order1 = order.capitalize()
print(order1)
하지만 원래의 문자열은 변경되지 않는다. 이미 말했듯이 한 번 생성된 문자열은 절대로 변경이 불가하다.
In [14]:
order
Out[14]:
capitalize() 비슷하지만 다른 일을 하는 메소드들은 다음과 같다.
lower(): 모든 문자를 소문자로 바꾼다.upper(): 모든 문자를 대문자로 바꾼다.title(): 모든 단어의 첫문자를 대문자로 바꾼다.
In [15]:
order.lower()
Out[15]:
In [16]:
order.upper()
Out[16]:
In [17]:
order.title()
Out[17]:
또한 문자열이 순수 알파벳으로만 이루어졌는지 여부를 판단할 수 있다.
In [18]:
hello.isalpha()
Out[18]:
In [19]:
'abc_'.isalpha()
Out[19]:
In [20]:
'abc '.isalpha()
Out[20]:
물론 순수 숫자로 이루어졌는지 여부도 알 수 있다. 이 기능은 텍스트에서 전화번호 등이 있는지 여부를 알아내기 위해 사용되기도 한다.
주의: isnumric() 메소드를 활용한다. 하지만, 해당 메소드는 유니코드 문자열에 대해서만 작동한다.
파이썬에서 유니코드 문자열을 표시하기 위해서 아래와 같이 u라는 기호를 앞에 붙혀주면 된다.
유니코드(unicode)는 전세계의 문자를 컴퓨터에서 일관된 방식으로 처리하는 표준이라고 알고 있는 것으로 여기서는 충분하다.
In [21]:
u'46'.isnumeric()
Out[21]:
In [22]:
u'4.6'.isnumeric()
Out[22]:
In [23]:
u'4a6'.isnumeric()
Out[23]:
숫자로만 이루어닌 문자열을 진짜 숫자로 형변환시킬 수 있다.
예를 들어 int() 함수를 이용한다.
In [24]:
real_number = int('4')
print( real_number )
print( type(real_number) )
float() 함수를 이용하면 부동소수점 모양의 문자열을 부동소수점으로 형변환시킬 수 있다.
In [25]:
float('4.2') * 2
Out[25]:
int() 함수는 정수모양의 문자열에만 사용할 수 있다.
In [26]:
int('4.2') * 2
In [27]:
int('4') * 2
Out[27]:
부동소수점 모양의 문자열이 아니면 float() 함수도 오류를 발생시킨다.
In [28]:
float('I would like 4.5 gyros')
In [29]:
falafel
Out[29]:
In [30]:
falafel[1]
Out[30]:
주의: 파이썬을 포함해서 많은 대부분의 프로그래밍 언어에서 인덱싱은 0부터 시작한다. 따라서 첫 째 문자를 확인하고자 할 때는 1이 아닌 0을 인덱스로 사용해야 한다.
In [31]:
falafel[0]
Out[31]:
인덱싱은 왼쪽에서부터 0으로 시작하며 오른쪽으로 진행할 때마다 1씩 증가한다. 예를 들어 세 번째 문자를 확인하고 싶다면 인덱스 2를 사용한다.
In [32]:
falafel[2]
Out[32]:
문자열이 길 경우 맨 오른편에 위치한 문자의 인덱스 번호를 확인하기가 어렵다. 그래서 파이썬에서는 -1을 마지막 문자의 인덱스로 사용한다.
즉, 맨 오른편의 인덱스는 -1이고, 그 왼편은 -2, 등등으로 진행한다.
In [33]:
falafel[-1]
Out[33]:
In [34]:
falafel[-2]
Out[34]:
문자열의 길이보다 같거나 큰 인덱스를 사용하면 오류가 발생한다.
문자열의 길이는 len() 함수를 이용하여 확인할 수 있다.
In [35]:
len(falafel)
Out[35]:
In [36]:
falafel[5]
주의: falafel 변수에 할당된 값은 kebap이란 문자열이다.
kebap 문자열의 길이는 5이지만 마지막 문자인 p의 인덱스는 그보다 하나 작은 4이다.
In [37]:
falafel
Out[37]:
kebap에서 ke 부분을 추출하고 싶다면 다음과 같이 하면 된다:
In [38]:
falafel[0 : 2 : 1]
Out[38]:
즉, 문자열 처음부터 2번 인덱스 전까지, 즉 두 번째 문자까지 모두 추출하는 것이다. 반면에 하나씩 건너서 추출하려면 다음처럼 하면 된다:
In [39]:
falafel[0 : 4 : 2]
Out[39]:
시작인덱스, 끝인덱스, 계단 각각의 인자가 경우에 따라 생략될 수도 있다. 그럴 때는 각각의 위치에 기본값(default)이 들어 있는 것으로 처리되며, 각 자리의 기본값은 다음과 같다.
시작인덱스의 기본값 = 0끝인덱스의 기본값 = 문자열의 길이계단의 기본값 = 1
In [40]:
falafel[0 : 2]
Out[40]:
In [41]:
falafel[: 2]
Out[41]:
In [42]:
falafel[: 4 : 2]
Out[42]:
In [43]:
falafel[ : : 2]
Out[43]:
양수와 음수를 인덱스로 섞어서 사용할 수도 있다.
In [44]:
falafel[ : -1 : 2]
Out[44]:
주의: -1은 문자열의 끝인덱스를 의미한다.
끝인덱스가 문자열의 길이보다 클 수도 있다. 다만 문자열의 길일 만큼만 문자를 확인한다.
In [45]:
falafel[: 10]
Out[45]:
아래와 같이 아무 것도 입력하지 않으면 해당 문자열 전체를 추출한다.
In [46]:
falafel[:]
Out[46]:
시작인덱스 값이 끝 인덱스 값보다 같더가 작아야 제대로 추출한다. 그렇지 않으면 공문자열이 추출된다.
In [47]:
falafel[3 : 1]
Out[47]:
이유는 슬라이싱은 기본적으로 작은 인덱스에 큰 인덱스 방향으로 확인하기 때문이다. 역순으로 추출하고자 한다면 계단을 음수로 사용하면 된다.
In [48]:
falafel[3 : 1 : -1]
Out[48]:
In [49]:
falafel[-1 : : -1]
Out[49]:
애완동물의 목록을 할당받는 pet_shop 변수가 아래와 같이 선언되어 있다.
In [50]:
pet_shop = 'dog cat hedgehog fish bird'
견본답안:
In [51]:
pet_shop.title()
Out[51]:
견본답안:
In [52]:
pet_shop[2]
Out[52]:
견본답안:
In [53]:
pet_shop[8 : 16]
Out[53]:
견본답안:
In [54]:
pet_shop[15: 7 : -1]
Out[54]:
In [55]:
dogs, cats = '8', '4'
견본답안:
In [56]:
print(int(dogs))
In [57]:
print(int(cats))
In [58]:
print(abs(int(dogs) - int(cats)))