본문 바로가기
아이티/파이썬

너무 쉬운 파이썬 강좌 5) 파이썬 기초 강좌 자료형(String Part I)

by 베베슈슈 2023. 11. 25.

파이썬 기초 강좌 이미지
파이썬 기초 강좌 이미지

목차

    문자열 소개

    스트링 자료형은 다른 자료형보다 매우 중요한 편이다. int, float, bool 형의 자료는 특정 의미 밖에 가지지 못하지만 String형은 어떠한 형태도 표현이 가능하기 때문에 아주 자주 쓰인다. 그래서 중요하기도 하고 String 자료형을 제어하기 위해서 존재하는 함수들도 꼭 익히고 가야 한다. 

     

    String 자료는 따옴표로 묶여있는 문자열로 chat들을 연결해 만든 배열(Array) 형태의 자료이다. 선언할 때는 간단하게 "비슈의테크트리" 혹은 '비슈의테크트리'라는 식으로 따옴표 안에 문자열을 넣어서 선언을 하면 된다.

    str_blogname = "비슈의테크트리"
    print(str_blogname)

     

    그림으로 그려보면 아래와 같은데 네모칸 하나가 각각 char를 나타내는 자료형이라고 할 수 있다. 그리고 여러 개의 char를 합쳐서 하나의 문자열(String)을 구성하게 되는데 이때 변수의 이름인 str_blogname 은 0번째 주소를 가리키게 된다.

    String을 표현하기 위한 배열 그림
    String을 표현하기 위한 배열 그림

     

    앞에서 int, float, bool 자료형을 할 때는 주소번지나 메모리의 이야기는 하지 않았는데 갑자기 이런 이야기를 해서 생소하다고 생각할 수 있을 것 같다. 이 부분은 다음에 나올 슬라이싱이나 인덱싱을 쉽게 이해하기 위해서인데 앞에서도 이야기했듯이 문자열은 문자의 Array(배열)이기 때문에 글자 하나하나를 직접 액세스 할 수가 있다.

    str_blogname = "비슈의테크트리"
    print(str_blogname)			#비슈의테크트리
    
    print(str_blogname[0])		#비
    print(str_blogname[1])		#슈
    print(str_blogname[2])		#의
    print(str_blogname[3])		#테
    print(str_blogname[4])		#크
    print(str_blogname[-2])		#트
    print(str_blogname[-1])		#리

     

    위의 코드에서 보면 문자열 변수에 [ ] 중괄호를 이용해 특정인덱스에 있는 글자를 출력해 보았다. 0은 시작번지 글자 -1은 제일 뒤의 글자를 의미한다. str_blogname[1] 이라고 출력했다면 "슈"라고 출력이 된다. 이렇게 인덱스를 통해 접근하면 글자를 수정할 수도 있을 것 같은데 파이썬의 문자열은 불변(immutable)이라 변경은 되지 않는다. 마치 상수와 같은 느낌이다. 

    문자열 연산자 적용

    문자열에서 연산자를 사용하면 어떻게 될까? 파이썬에서 문자열에는 더하기와 곱하기 연산자를 사용할 수 있다. 더하기 연산자를 사용하면 어떻게 될지는 쉽게 예상이 될텐데 곱하기 연산자를 사용하면 어떻게 될까??

    str_test = "문자열" + "테스트"
    print(str_test)			#문자열테스트
    str_test *= 3
    print(str_test)			#문자열테스트문자열테스트문자열테스트

     

    곱하기는 더하기를 여러 번 반복하는 것이기 때문에 문자열도 적힌 숫자만큼 곱해진다. *= 연산자를 사용한 것을 볼 수 있을 텐데 할당을 위한 기본 연산자는 = 이지만 개발의 편의성을 위해 A = A * B의 형태는 A *= B로 줄여서 쓸 수 있다는 것을 기억해 둘 필요가 있어서 str_test = str_test * 3을 줄여서 써보았다.

    문자열의 슬라이싱(slicing)

    이번에는 문자열의 슬라이싱에 대해서 알아보도록 하자. 문자열을 출력할 때 전부를 출력할 수도 있지만 특정 부분만 출력할 필요가 있을 때도 있다. 이럴 때는 슬라이싱을 이용해서 특정 영역만 출력할 수 있다.

    my_string = 'Hello, World!'
    print(my_string[0:5])  # 출력: Hello
    print(my_string[7:])   # 출력: World!

     

    위의 예제처럼 인덱스 옆에 콜론(:)을 사용하면 콜론의 앞에 있는 인덱스에서부터 콜론 다음에 있는 인덱스 까지라는 뜻이 된다. 정리하자면 아래와 같다.

    [A:] : A에서부터 끝까지

    [A:B] : A에서부터 B까지

     

    첫 번째 예제에서는 0~5까지의 문자열을 출력하도록 했는데 슬라이싱에서 0:5면 0번째는 'H'이고 5번째는 ','라서 Hello,라고 출력이 될 것 같은데 Hello까지만 출력이 된다. 슬라이싱에서 [A:B]로 범위를 지정하면 마지막 번지는 출력되지 않는다. 

    따라서 다시 정리해 보면

    [A:] : A에서부터 끝까지

    [A:B] : A에서부터 B까지(단 B번째 문자는 제외)

    이렇게 정리할 수 있겠다.

    문자를 앞에서부터 몇 번째, 중간부터 어디까지라고 설정하는 방법도 있겠지만 가장 뒤에 있는 몇 자만 출력할 필요가 있을 때도 있다.

    my_string = 'Hello, World!'
    
    print(my_string[-6:])		#World!
    print(my_string[-6:-1])		#World

     

    위의 예제처럼 인덱스를 -값으로 사용하면 뒤에서부터 자리를 센다.이경우에는 -1이 마지막 글자를 나타낸다.

    [-6:]이라고 표현하면 뒤에서부터 여섯 번째 값에서부터 끝까지 출력하게 되고

    [-6:-1]이라고 표현하면 뒤에서부터 여섯번째 값에서부터 제일 뒤의 문자열까지가 대상이 되는데 마지막 글자는 제외되기 때문에 World 까지만 출력이 되는 것을 볼 수 있다.