티스토리 뷰

파이썬에서는 숫자가 아닌 텍스트 정보를 모두 스트링 타입으로 표현한다. 스트링 객체를 표현하는 방법이 여러 가지인데, 다음과 같은 네 가지 방법이 있다. 홑따옴표와 쌍따옴표를 한번 또는 세번씩 사용하여 문자열 부분을 둘러싼다.

my_string = 'Hello'  my_string = "Hello"  my_string = '''Hello'''  my_string = """Hello"""    # 삼중따옴표는 여러 줄 스트링 표현가능, 즉 줄바꿈을 안에 포함할 수 있다. my_string = """Hello, welcome to  the exciting world  of string in Python"""

파이썬에는 한글자만 가지는 문자형은 없고 한 글자만 가지는 것도 스트링이다. 주의할 점은 다음과 같이 홑따옴표 한 글자가 자바에서는 문자형이지만 파이썬에서는 문자열로 취급된다는 점이다.

'a' # 길이 1인 문자열

다음은 스트링의 원소를 접근하는 방법을 알아보자. 인덱스는 자바에서와 같이 첫 칸이 0으로 시작하고 마지막 칸은 길이-1이 된다. 파이썬에서 특징적인 것은 음수 인덱스가 있다는 점이다. -1은 마지막 글자를 나타내고 -2는 끝에서 두 번째 글자가 된다.

>>> my_string = 'programming' >>> my_string[0] # 첫번째  'p'  >>> my_string[-1] # 마지막 'g'

파이썬에서는 스트링의 부분을 표현하는 기능이 있다. 슬라이스(slice)라고도 하는데, 이것은 범위에 해당하는 부분스트링을 돌려준다. 여기서 주의할 점은 range에서와 마찬가지로 첫 인덱스는 포함이고 마지막 숫자는 미포함(1 이상, 4미만)의 범위를 나타낸다.

>>> my_string[1:4] # 1번째 ~ 4번째 전 'rog' >>> my_string[5:-2] # 5번째에서 끝에서 두번째 전 'ammi'

파이썬의 스트링에서 범위는 range 함수에서 썼던 step을 써서 몇글자씩 건너뛰는 것도 가능하다. 또한 시작값과 끝값, step값을 모두 생략할 수 있다. 시작값은 생략하면 0, 끝값은 생략하면 길이, step은 생략하면 1이 된다.
 
 
 

자바에서와 마찬가지로 스트링의 범위를 벗어나는 인덱스는 오류를 일으킨다.

# 인덱스가 스트링의 크기를 벗어남 >>> my_string[15]  ... IndexError: string index out of range  # 인덱스는 정수여야 함 >>> my_string[1.5]  ... TypeError: string indices must be integers

다음의 연습문제를 돌려보면서 스트링의 범위를 확인해 보자.

>>> city = ‘honolulu’ >>> city[:4] >>> city[4:] >>> city[2::2]

다음으로 스트링의 연산을 살펴보자. 스트링은 +, *, 비교 연산을 가진다. 다음 연산을 실행하여 결과를 확인해 보자.

>>> str1 = ‘abc’ >>> str2 = ‘def’ >>> str3 = str1 + str2  >>> str3  >>> str1 * 3  >>> str1 < str3

 파이썬에서는 문자열의 * 연산을 제공하는 것이 특징인데, 그 문자열을 회수만큼 반복한 문자열을 돌려준다. 이것은 자바에서 for 루프를 돌려야 하는 예에 대해 유용하게 쓰인다.

>>> word = 'Happy Birthday!!' >>> print('*'*10, ' '*3, word, ' '*3, '*'*10, sep='') **********   Happy Birthday!!   **********

다음으로 파이썬에서는 스트링의 요소에 대해 반복하는 기능을 제공한다.

for x in my_string:

x는 my_string의 한 글자씩 반복하여 루프의 몸체부를 실행한다.

파이썬에는 많은 빌트인 함수가 제공된다. 빌트인 함수란 앞에 점으로 객체를 붙이지 않고 바로 부를 수 있는 함수로 앞에서 본 print(), input(), int() 등도 이러한 빌트인 함수다. 스트링에 취할 수 있는 중요한 몇 가지를 살펴보자.  우선 len( ... ) 함수는 스트링을 문자열로 받아 길이를 돌려준다.

>>> len(str3)  6

이외에도 list(), min(), max() 같은 일반적인 빌트인 함수도 스트링 값을 받아 결과를 돌려준다. 파이썬에서의 함수는 자바와는 많이 다른데, 일단 매개변수의 타입이 없어서 어떤 값이나 변수든지 넣어서 호출할 수 있다. 그러나 그 타입에 대해 코드가 동작할 수 있는 경우에만 결과를 돌려준다. 예를 들어 리스트로 바꿔주는 list()는 스트링이 들어오면 한 글자씩 원소로 가지는 리스트로 바꾸어 돌려준다. 또한 최대값을 돌려주는 max() 함수는 스트링에 대해 알파벳 중에 제일 큰 것을 돌려준다. 그리고 int()는 숫자로 바꾸지 못하는 스트링이면 오류가 발생한다. input() 함수는 스트링을 받아 그것을 입력할 때 커서로 사용한다. 그런 식으로 파이썬에서는 함수에 매개변수가 오면 그 함수가 수행하는데 적합하면 그에 맞는 동작을 하고 결과를 돌려준다. 함수의 코드를 수행하는데 문제가 있으면 해당하는 오류가 발생한다(인터프리트 언어의 특징). 

다음으로 스트링에 대해 정의된 메소드가 엄청나게 많다. 이것은 차차 배워나가야 할 내용이고 필요할 때 찾아서 사용하거나 공부하면 된다. 여기를 참고하거나 인터넷에서 검색하면 쉽게 정보를 찾을 수 있다. 결국 어떤 기능을 어떻게 찾아야 할지 아는 것이 파이썬에서는 실력의 가장 중요한 요소다.

  • upper() : 스트링을 대문자로 바꾸어 반환 
  • lower() : 스트링을 소문자로 바꾸어 반환
  • split() : 빈칸으로 쪼개서 스트링 리스트로 반환
  • join() : 매개변수로 온 스트링들을 이 스트링으로 이어 붙임
  • index() : 매개변수 스트링의 인덱스를 반환
  • replace() : 첫번째 매개변수를 두번째 매개변수로 바꾸어 반환

자바의 스트링과 마찬가지로 파이썬의 스트링도 불변성을 가지고 동일하게 동작한다. 그래서 스트링을 변경하는 메소드는 자체의 값을 바꾸지 않고 변경된 결과 새로운 스트링 객체를 반환한다.

>>> "파이썬의 함수와 메소드".split()  [‘파이썬의’, ‘함수와’,  ‘메소드’]   >>> 'Happy New Year'.find('ew')  7   >>> 'Happy New Year'.replace('Happy', 'Brilliant')  'Brilliant New Year' 

다음 연습문제를 각자 풀어보자.

[연습문제] "2018/9/21"처럼 날짜를 입력 받아 아래와 같이 세 가지 형태로 출력한다. 2018년 9월 21일 2018-9-21 9/21/2018

 

다음으로 파이썬의 스트링의 중요한 기능인 format에 대해 살펴보자. 이것은 자바에서 printf나 String.format이 해주던 역할을 하는 메소드라고 보면 된다. 포매팅 스트링을 이용해서 매개변수를 넣어서 형식에 맞춘 결과를 만들어내는 메소드다.

먼저 예를 살펴보자. 포매팅 문자열에서 집합괄호는 매개변수를 끼워넣을 자리에 대응한다. (자바의 %d 같은 역할) 그러나 자바보다 좀더 세련된 구문과 강력한 기능을 제공한다.

>>>'{}, {} 그리고 {}'.format('속초', '부산', '제주도') '속초, 부산 그리고 제주도' >>>'{1}, {2} 그리고 {0}'.format('속초', '부산', '제주도') '부산, 제주도 그리고 속초' 

좌우정렬과 폭을 {} 안에 콜론 다음에 지정할 수 있다.

>>>'[{:<10} {:<10}, {:>10}]'.format('속초', '부산', '제주도') '[속초         부산        ,        제주도]' >>>'[{1:<10}] [{2:<10}] [{0:>10}]'.format('속초', '부산', '제주도') '[부산        ] [제주도       ] [        속초]' 

콜론 뒤에 오는 것은 자바의 String.format에서 %뒤에 오는 것들과 비슷하다. d나 f 같은 타입 구분 글자와 자리수, 좌우정렬 방식이 오게 된다. format 기능은 한 줄씩 출력할 때보다는 여러 번 반복하여 출력할 때 줄맞춰 출력해 주는 목적으로 많이 사용한다. 다음 예는 숫자를 우측 정렬하는 것을 보여준다.

>>> import math 
>>> for x in range(1, 101, 10):
    print('{:>5d} {:>10d} {:>5.3f}'.format(x, x*x, math.sqrt(x)))
     1          1 1.000
    11        121 3.317
    21        441 4.583
    31        961 5.568
    41       1681 6.403
    51       2601 7.141
    61       3721 7.810
    71       5041 8.426
    81       6561 9.000
    91       8281 9.539
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함