본문 바로가기

파이썬

파이썬 Sequence 자료형 이해하기 1

반응형

파이썬 Sequence 자료형

이번 포스팅에서는 파이썬 Sequence 자료형에 대해서 알아보겠습니다. C/C++ 같은 프로그래밍 언어는 ‘a’, ‘b’, ‘c’와 같은 알파벳 글자 하나를 ‘문자’라고 하고, ‘python’처럼 둘 이상의 문자로 구성된 것을 ‘문자열(String)’이라고 합니다. 파이썬은 다른 프로그래밍 언어와 달리 문자와 문자열을 구분하지 않고 작은따옴표(‘’)나  큰따옴표(“”)에 넣어 쓴 문자를 문자열이라고 합니다. 즉 문자 하나도 문자열로 취급합니다. 

이전 포스팅

파이썬 숫자 자료형 이해하기 2


파이썬 Sequence 자료형 이해하기

파이썬은 문자열을 영어 알파벳만 처리하는 방법(bytes)과 모든 언어 표기법이 처리하는 방법(str) 둘 다 지원합니다. 정수나 실수와 같은 두 가지 문자열은 다른 클래스를 만들어서 관리합니다. 파이썬 3버전부터는 모든 언어 표기법이 가능하므로 변수이름도 한글로 정의해서 사용할 수 있습니다.


리스트와 튜플 알아보기

지난 포스팅에서 파이썬의 기본 자료형(데이터 타입)인 정수형, 실수형을 배웠습니다. 이번 포스팅에서는 데이터가 여러 개 있을 때 효과적으로 저장하고 관리할 수 있는 자료구조 중에 가장 많이 쓰이는 리스트(list), 튜플(tuple)을 자세히 알아보겠습니다. 이런 것을 Sequence 자료형이라고 합니다.


회원 이름을 관리하는 프로그램을 만들어 회원 이름을 번호 순서대로 관리하고  싶습니다. 어떻게 하면 될까요? 앞에서 배운 변수를 이용해 회원 이름을 문자열로 표현해서 저장하면  되겠죠?

member1 = “홍길동”

member2 = “홍길순”

member3 = “이순신”

member4 = “유관순”


회원이 5명뿐이라면 변수를 5개만 만들면 됩니다. 그런데 회원이 점점 늘어 백 명, 천  명이 되면 변수도 100개, 1000개 만들어야 합니다. 이와 같이 같은 자료형을 여러 개 관리해야 할  경우에 편리하게 쓸 수 있는 것이 리스트(list)입니다.


리스트를 이용하면 여러 데이터를 한 번에 저장할 수 있어서 변수를 여러 개 만들 필요가 없습니다. 리스트는 대괄호([ ])를 쓰고 그 안에 데이터를 넣습니다. 데이터 사이에는 쉼표를  넣어서 구분합니다.


member_list = [“홍길동”, “홍길순”, “이순신”, “유관순”]


여러 데이터를 저장해서 관리할 수 있는 자료구조가 또 있습니다. 바로  튜플(tuple)입니다.


리스트와 튜플의 차이점은 무엇일까요? 리스트는 안에 들어있는 데이터(원소)를 바꿀  수 있지만, 튜플은 바꿀 수 없습니다. 바꿀 수 있다는 것은 데이터(원소)를 더 넣거나 지울 수  있다는 겁니다.


이렇게 여러 원소로 구성된 자료형을 시퀀스(sequence) 자료형이라고 합니다. 시퀀스  자료형의 특징은 같은 타입의 여러 원소를 가질 수 있을 뿐만 아니라 리스트와 같은 객체도 원소로  가질 수 있다는 점입니다.


문자열 객체 알아보기

문자열도 클래스가 있고 객체로 만들어서 사용할 수 있습니다. 정수나 실수처럼  리터럴 표기법으로 객체를 만들어 볼까요? 문자, 숫자와 공백문자 등 문자코드로 제공하는 것은 모두 문자열로 쓸 수 있습니다.


문자열 알아보기

큰따옴표(“”) 사이에 영어 문자열을 쓰고 실행하면 그대로 문자열이 출력됩니다.  작은따옴표(‘’) 사이에 한글을 넣고 실행해도 작성한 것을 그대로 출력합니다.


리터럴 표기법으로 작성된 문자열은 객체입니다. 이 문자열 객체의 클래스를 확인하기 위해 __class__를 입력합니다. 출력된 결과가  str로 나옵니다. 문자열의 클래스 이름이 str인 것을 알 수 있습니다.


리터럴 표기법으로 작성한 한글 문자열을 변수 s에 할당합니다. 변수 s를 쓰고  __class__를 입력합니다. 클래스 이름이 str이라고 나옵니다.


print 명령어를 사용하면 class ‘str’을 출력합니다.


isinstance 명령어로 객체가 특정 클래스로 만든 것인지 확인할 수 있습니다. 변수 s는  문자열 객체를 가리킵니다. 문자열 객체는 str 클래스로 만들었으니까 참(True)이 되겠죠?


문자열에 연산자 사용하기

파이썬 연산자는 숫자 객체에만 쓸 수 있는 것이 아닙니다. 문자열 객체에도 덧셈과  곱셈 연산자를 쓸 수 있습니다. 문자열에 쓰는 덧셈과 곱셈은 숫자 처리할 때와 다릅니다. 연산자를 객체마다 다르게  쓸 수 있는 것은 연산자들이 클래스마다 다르게 정의되어 있기 때문입니다.


메소드는 클래스에 들어있는 함수를 말합니다. 그래서 메소드를 ‘클래스 함수’라고도  합니다. 함수는 어떤 기능을 하는 코드를 말하는데 나중에 자세히 배울 겁니다. 우선 ‘함수는 어떤  일을 한다’ 정도만 알면 됩니다.


예를 들어 ‘강아지’라는 클래스를 만들고 ‘짖는다’라는 함수를 만들었다고  생각해봅시다. 이 함수를 쓰면 ‘멍멍’하고 짖습니다.

 

강아지 클래스에서 ‘뽀삐’라는 객체를 만듭니다. 이 객체는 강아지입니다. 멍멍 큰  소리를 내어 짖을 수 있겠죠? ‘짖는다’라는 메소드를 사용할 수 있습니다.


메소드는 


“객체이름.메소드이름”


으로 씁니다. 


“뽀삐.짖는다”라는 명령어를 실행하면 ‘멍멍’ 짖습니다.


고양이라는 클래스도 만들 수 있습니다. 이 클래스에도 ‘짖는다’라는 함수를 만듭니다.  이 함수를 사용하면 ‘야옹’ 소리를 냅니다. 고양이 클래스에서 ‘미미’라는 객체를 만듭니다. 마찬가지로 ‘짖는다’ 메소드를 사용할  수 있겠죠?


“객체이름.메소드이름”


“미미.짖는다”라는 명령어를 실행하면 ‘야옹’하고 소리를 냅니다. 같은 메소드이지만  다른 일을 하는 것이죠.


숫자와 문자열도 마찬가지입니다. 이것에 관해서는 나중에 더 자세히 알아보겠습니다.  여기서는 "같은 메소드도 다른 일을 할 수 있구나!” 정도만 기억하세요.


문자열 연산자 사용하기

변수 s에 리터럴 표기법을 써서 문자열 객체를 만들어 할당합니다.

문자열 객체가 저장된 변수 s 다음에 더하기 연산자를 넣고 리터럴 표기법으로 문자열  객체를 하나 더 만듭니다. 


이 연산의 결과를 변수 ss에 할당합니다. 변수 ss를 실행해보면 두  문자열 객체가 하나로 합쳐진 것을 볼 수 있습니다.


이번에는 리터럴 표기법으로 만든 문자열 객체와 정수를 곱해볼까요? 처리된 결과를  변수 ss_에 할당했습니다. 할당된 변수를 확인하면 정숫값만큼 문자열이 더 생긴 것을 알 수  있습니다.


문자열 객체는 여러 개의 문자로 구성된 집합이므로 문자열의 문자를 하나씩 확인할  때는 대괄호 연산자([ ])를 사용합니다. 문자 하나하나를 문자열의 ‘원소’라고 생각하면 됩니다.


여기서 인덱스를 알아야 합니다. 인덱스는 순서라고 생각하면 됩니다. 컴퓨터는 우리와는 조금 다르게 0부터 숫자를 셉니다. 변수 ss_에 저장된 문자열을  인덱스로 표현해볼까요?


첫 번째 문자의 인덱스는 0입니다. 8번째 문자의 인덱스는 7이고 문자는 ‘이’입니다. 이런 표기법을 인덱스 검색이라고 합니다.


문자열에 문자가 몇 개 있는지는 len 명령어로 알 수 있습니다. 변수 ss_에 저장된  문자열 객체는 15개의 문자로 되어 있습니다. 한글도 하나의 문자로 처리합니다.


마지막 인덱스는 0부터 시작했으므로 전체 길이에 -1을 해서 검색해야 인덱스 범위  내의 마지막 값을 확인할 수 있습니다.


순서를 거꾸로 세는 경우가 있는 것과 마찬가지로 인덱스도 오른쪽에서 왼쪽으로  거꾸로 값을 확인 할 수 있습니다. 이때 인덱스는 -1부터 시작합니다. 왼쪽으로 갈수록 인덱스가 1씩 더  작아집니다.


이때 인덱스 시작은 -1부터 시작하므로, 문자열 길이가 15이면 첫 글자의 인덱스는  -15가 됩니다.


그런데 인덱스 검색의 단점은 인덱스 범위 내에서만 조회가 가능하다는 점입니다.  인덱스 범위를 벗어난 조회를 하면 예외가 발생합니다.


파이썬에 ‘슬라이싱(slice)’ 기능이 있습니다. slice는 ‘자르다’라는 뜻입니다. 문자열에서 원하는 문자열만 가져올 수 있는 기능입니다. 가져오고 싶은 문자열의 범위를 인덱스로 정하면  됩니다.


슬라이싱할 때는 시작하는 곳, 끝나는 곳, 간격을 정해서 문자열 객체에서 원하는 문자열을 가져옵니다.


문자열[시작하는 곳:끝나는 곳:간격]


특정한 범위의 첫 번째 시작점은 포함되지만, 종료점은 검색에 포함되지 않습니다. 간격을 쓰지 않으면 간격은 1이 됩니다. 예제를 보면서 어떤 뜻인지 알아볼까요?


SS_[0:3]은 0번째 인덱스부터 3번째 인덱스까지의 문자열을 하나씩 가져와서 새로운  문자열을 만듭니다. 세 번째 문자는 포함하지 않습니다. ‘파이썬파’가 아니라 ‘파이썬’이 되는  것이죠. 간격을 쓰지 않았으므로 간격은 1이 됩니다.


이번에는 간격을 넣어 원하는 문자만 가져옵니다. 0번부터 14번 문자까지 두 칸씩 건너뛰어 문자를 가지고 와서 새로운 문자열을 만듭니다.


시작하는 곳과 끝나는 곳을 정하지 않고 간격만 -1로 정하면 맨 끝에서부터 거꾸로 문자를 가지고 와서 문자열을 만듭니다. 그러면 글자가 뒤집히겠죠?


문자열하고 숫자를 합칠 수 있을까요?


문자열과 숫자는 + 연산자로 합칠 수 없습니다. 문자열은 문자열끼리, 숫자는 숫자끼리 +연산자를 사용할 수 있습니다. 


문자열과  숫자를 합치려면 str함수를 써서 숫자 객체를 문자열 객체로 바꾸면 됩니다. str은 string(문자열)의  줄임말입니다.


책소개

파이썬독학 포스팅을 내용을 정리하여 <반드시 알아야 할 파이썬 입문 A to Z>이라는 책으로 정리했습니다. 책으로 구매하여 공부하고 싶은 분들은 아래 링크를 클릭하길 바랍니다.


반드시 알아야 할 파이썬 입문 A to Z


반응형