파이썬에서 기본 자료형인 문자열 자료형을 살펴 본다.
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)))