Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

민수야, 너도 할 수 있어

Python 공부 (3) - 자료형(문자열) 본문

언어/python

Python 공부 (3) - 자료형(문자열)

devpola 2020. 1. 19. 20:40

자료형 - 문자열(String)

    이번에는 python의 자료형 중, 문자열 자료형에 대해 공부해본다. 문자열은 문자, 단어 등으로 구성된 문자들의 집합이다. 예를 들면 "hello", "1234" 등이 있다. "1234"는 숫자형 같지만, python에서 "" 안에 있으면 문자열로 본다. 참고로, 저자는 공부자료로 박응용 저자의 점프 투 파이썬 책을 이용하고 있다. 이는 구글에서도 무료로 볼 수 있으니 공부에 참고하길 바란다.

문자열 만드는 법

  1. "Hello World"
  2. 'Hello World'
  3. """Hello World"""
  4. '''Hello World'''

    python에서 문자열을 만드는 방법은 위 4가지가 있다. 참고로, python에서 주석은 #을 사용한다. 하지만, 주석문이 여러 줄일 경우, 아래와 같이 주석문을 """나 '''사이에 두면된다.

"""
이 프로그램은 Hello World!
문자열을 출력하는 프로그램
입니다.
"""

 

여러줄인 문자열을 변수에 대입

  1. 이스케이프 코드(프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 문자 조합) '\n' 삽입

    multiline = "Hello World!\nMy name is Ted"
    print(multiline)
    #"Hello World!
    #My name is Ted"
  2. 위에서 언급한 주석문이 여러줄일 경우와 같이 """나 ''' 사이에 여러줄의 문자열을 두면된다.

    multiline = '''
    Hello World!
    Myname is Ted
    '''
    print(multiline)
    #"Hello World!
    #My name is Ted"

 

문자열 연산하기

  • 문자열 더하기 (연결하기)
    a = "hello"
    b = " world!"
    c = a+b
    print(c)    #"hello world!"
    

    위 예제의 경우, a+b를 통해 a 문자열과 b 문자열을 연결한다. 그리고, c라는 새로운 변수에 a와 b를 연결한 문자열을 대입하고 이를 출력했는데 이 과정을 생략하고 바로 'print(a+b)'를 해도 같은 결과를 출력한다.

  • 문자열 곱하기 (반복하기)
    a = "hello"
    b = a * 2
    print(b)    #"hellohello"

 

문자열 인덱싱(Indexing)과 슬라이싱(Slicing)

  • 문자열 인덱싱
    a = "hello world!"
    print(a[2])    #1

    위의 예제에서 a[2]는 a 문자열 중, 세 번째 요소를 반환한다. 여기서! 번호는 2지만, 문자열의 세 번째 요소(문자)를 반환하는 이유는 아래를 살펴보면 알 수 있다.

h e l l o   w o r l d !
0 1 2 3 4 5 6 7 8 9 10 11

위처럼, 문자열 요소마다 번호를 매길 수 있다. 이렇게 문자열 이름[번호] 를 통해 문자열 내의 특정한 값을 반환하게 하는 것이 '인덱싱' 이다. 여기서 주의 할 점은 인덱스 번호의 처음 시작이 1이 아닌 0 이라는 점이다. 그렇기에 []안에 들어가는 번호가 x라면 인덱싱이 반환하는 값은 문자열의 x+1 번째 요소인 것이다.

  • 인덱싱 활용하기 (번호에 음수를 넣는다면?)
    a = "hello world!"
    print(a[-1])    #!
    print(a[-5])    #o

    위 예제를 보면 알 수 있듯이 번호 앞에 '-'를 붙여 문자열을 뒤에서 부터 읽을 수 있게된다. a[-1]은 뒤에서 첫 번째 문자를 반환한다.

  • 문자열 슬라이싱

    인덱싱은 문자열 내의 특정요소 '하나' 만 반환한다면, 슬라이싱은 하나 이상을 묶어서 문자열 단위로 반환한다.

a = "hello world!"
print(a[0:3])    #"hel"

위 예제에서 a[0:3]은 문자열의 0~2 번째 인덱스에 해당하는 요소들을 반환 한다. 여기서 주의할 것은 문자열 이름[시작번호:끝번호]처럼 슬라이싱 할 때에, 끝번호에 해당하는 인덱스의 요소는 반환되는 요소에 포함하지 않는 것이다.

  • 슬라이싱 활용하기

    아래의 예제들은 a = "hello world!" 문자열이 선언되었다고 가정하고 보면된다.

  1. 슬라이싱 할 때, 시작 번호가 항상 0일 필요없다.

    print(a[5:7])    #"w"
  2. 끝 번호 부분을 생략하면 시작 번호부터 그 문자열의 끝까지 반환한다.

    print(a[3:])    #"lo world!"
  3. 시작 번호 부분을 생략하면 문자열의 처음부터 끝번호 전 요소까지 반환한다.

    print(a[:8])    #"hello wo"
  4. 시작 번호와 끝 번호 둘 다 생략하면 문자열의 전체를 반환한다.

    print(a[:])    #"hello world!"
  5. 인덱싱과 마찬가지로 음수를 넣을 수 있다.

    print(a[1:-2])    #"ello worl"
  • 슬라이싱으로 문자열 나누기

    아래의 예제는 자주 사용되는 슬라이싱 기법 중 하나이다.

a = "201600170Jason"
school_num = a[:9]
name = a[9:]
print(school_num)    #"201600170"
print(name)    #"Jason"

 

문자열 포매팅

    문자열 내의 특정한 값을 바꾸어야 할 경우, 문자열 내에 어떤 값을 삽입해야 한다. 그 때에 사용하는 것이 문자열 포매팅이다.

  • 문자열 포매팅 예제
  1. 숫자 바로 대입

    a = "I am %d years old."%24
    print(a)    #"I am 24 years old."
  2. 문자열 바로 대입

    a = "I am %s years old."%"twenty four"
    print(a)    #"I am twenty four years old."
  3. 변수로 대입

    num = 24
    a = "I am %d years old."%num
    print(a)    #"I am 24 years old."
  4. 2개 이상의 값 대입

    num = 24
    name = "Ted"
    a = "My name is %s, and I am %d years old."%(name, num)
    print(a)    #My name is Ted, and I am 24 years old."
  • 문자열 포맷코드

    위의 예제에서 사용된 %d나 %s와 같은 문자들을 문자열 포맷코드라고한다. 참고로, C언어에서는 '서식문자'로 불리며 비슷하게 사용된다. 위 예제에서 사용된 것 이외에도 여러 자료형에 맞는 문자열 포맷코드들이 있다.

 

문자열 관련 함수들

  • 특정 문자 개수 반환 (count)
    a = "hello"
    b = a.count('l')
    print(b)    #2

    문자열 중, count 함수에 인자로 전달 된 특정 문자의 개수를 반환한다.

  • 특정 문자 위치 반환 (find)
    a = "hello"
    b = a.find('e')
    c = a.find('f')
    print(b)    #1
    print(c)    #-1

    문자열 중, find 함수에 인자로 전달 된 특정 문자가 처음으로 나온 위치를 반환한다. 만약, 문자열 내에 찾고자 하는 문자가 없으면 -1을 반환한다,

  • 특정 문자 위치 반환 (index)
        index 함수는 find 함수와 사용 방법이 같다. 그리고, 인자로 전달 된 특정 문자의 처음으로 나온 위치를 반환하는 것도 같다. 다른 점은 문자열 내에 찾고자 하는 문자가 없다면 ValueError : substring not found 라는 에러가 발생한다.

  • 문자열 삽입 (join)

    a = ','
    b = a.join("hello")
    print(b)    #"h,e,l,l,o"

    join 함수에 전달된 문자열의 각각 문자 사이에 join함수가 적용되는 문자나 문자열을 삽입한다.

  • 문자열 바꾸기 (replace)
    a = "hello world!"
    b = a.replace("hello","my")
    print(b)    #"my world!"

    replace(대체될 문자열, 대체할 문자열) 처럼 사용한다.

  • 문자열 나누기 (split)
    a = "hello world!"
    b = a.split()
    print(b)    #['hello', 'world']
    c = "a:b:c:d"
    c.split(':')
    print(c)    #['a','b','c','d']

    split 함수에 인자로 전달 된 문자를 기준으로 문자열을 나누어 '리스트'라는 자료형으로 반환한다. 만약, 함수에 아무 값도 전달되지 않으면 공백(스페이스, 탭, 엔터 등)을 기준으로 나누어준다.

  • 문자열 포매팅 (format)

    앞에서 배웠던 문자열 포매팅을 format 함수를 이용해서 할 수 있다.format 함수를 쓰면 문자열 포맷코드가 필요없다.

  1. 숫자 바로 대입하기

    a = "I am {0} years old.".format(24)
    print(a)    #"I am 24 years old."
  2. 문자열 바로 대입하기

    a = "I am {0} years old.".format("twenty four")
    print(a)    #"I am twenty four years old."
  3. 변수로 대입하기

    age = 24
    name = "Ted"
    a = "My name is {0}, and I am {1} years old.".format(name, age)
    print(a)    #"My name is Ted, and I am 24 years old."
  4. 변수 명으로 대입하기

    a = "My name is {name}.".format(name="Ted")
    print(a)    #"My name is Ted."

    위 예제에서 사용한 {}안에 숫자를 넣는 방법과 변수 명을 넣는 방법을 혼용해도 관계없다.


    이번 글에서는 python의 자료형 중, 문자열 자료형에 대해 공부 해봤다. 다음에는 리스트 자료형에 대한 공부를 포스팅할 것이다.