본문 바로가기

파이썬

파이썬 Sequence 자료형 이해하기 3(튜플과 리스트)

반응형

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

 

이전 포스팅

 

튜플 알아보기

리스트와 구조는 같지만, 튜플은 한번 만들어지면 들어있는 값을 바꿀 수 없습니다. 값을 바꿀 수 없으므로 바뀌지 않는 값을 여러 개 저장할 때 많이 사용합니다.

 

리터럴 표기법을 써서 빈 튜플을 만들 때는 빈 괄호(( ))를 사용합니다. 이것을 변수  t0에 할당합니다. 튜플 클래스인 tuple을 써서 빈 튜플을 만들 수도 있습니다. tuple() 명령어를 실행하면 빈 튜플이 만들어집니다.

 

문자열, 리스트와 마찬가지로 len 함수로 튜플에 값이 몇 개 있는지 확인할 수 있습니다.

 

빈 튜플의 객체는 소괄호(( ))를 써서 만들 수 있습니다. 리스트와 마찬가지로 값을 여러 개 넣을 때는 쉼표(,)로 값을 구분합니다.

 

하나의 값을 가진 튜플을 만들 때는 반드시 쉼표를 붙여서 값이 하나만 있다는 것을 표시해야 합니다. 이 경우 소괄호가 없어도 튜플이라는 것을 알 수 있습니다.

 

리터럴 표기법으로 튜플 객체를 만들 때는 괄호 없이 쉼표를 붙여서 변수 t에 할당합니다. 쉼표가 있어야 튜플 객체를 만들 수 있습니다.

 

문자열을 튜플로 만들 수 있습니다. 튜플 클래스에 인자로 문자열 객체를 넣고 변수 ts에 할당합니다. 리스트 클래스에서 문자열 객체를 받아서 리스트 객체 만드는 것처럼 문자열 객체의 문자 하나하나가 튜플의 값으로 저장됩니다.

 

튜플 클래스를 이용해서 튜플 객체를 만들 때 기존에 만들어진 튜플의 객체를 인자로 전달해서 실행하면 같은 객체를 가리키게 됩니다. 튜플은 한번 만들어지면 바꿀 수 없기 때문이죠.

 

변수가 같은 객체를 가리키는지 알아보기 위해 키워드 is를 사용합니다. 같은 객체를 가리키면 True(참) 아니면 False(거짓)가 됩니다. 이것을 레퍼런스가 같다고 표현합니다. 레퍼런스는 메모리의 주솟값입니다.

 

반면, 리스트 클래스를 이용해서 리스트 객체를 인자로 받으면 새로운 객체를 만듭니다. 새 객체를 하나 더 만드는 것이죠. 

 

리스트 객체에 들어있는 값(원소)을 바꿀 수 있으므로 리스트 객체에 들어있는 값(원소)을 바꿀 때 다른 리스트 객체에 영향을 주지 않기 위해서 새로운 객체를 만드는 겁니다.

 

리스트 객체를 만들면 객체가 유일해야 하므로 유일한 정보인 레퍼런스(주소)도 같이 만듭니다. 객체를 하나 만들면 다른 객체가 구별되는 기준이 레퍼런스이므로 동일한 객체 여부를 키워드 is를 사용해서 확인합니다.

 

리터럴로 만든 리스트와 list 클래스로 만든 리스트가 동일한 값이지만 레퍼런스가 다르므로 다른 객체라는 것을 알 수 있습니다.

 

튜플 객체도 리스트 객체처럼 덧셈과 곱셈을 할 수 있습니다.

 

리스트와 튜플 메소드 알아보기

 

튜플은 들어있는 값(원소)을 바꿀 수 없으므로 두 개의 메소드만 제공하지만, 리스트는 다양한 메소드를 제공합니다.

 

먼저 두 클래스에 같이 있는 메소드를 알아봅시다.

 

리스트와 튜플 메소드 사용하기

파이썬 3버전에서는 한글로 변수이름을 만들 수 있습니다. 한글로 두 개의 변수를 만들어 리스트와 튜플 객체로 저장합니다.

 

튜플과 리스트 객체에서 같이 사용할 수 있는 메소드는 count와 index입니다. count 메소드는 어떤 값이 몇 개 들어있는지 확인하는 메소드이고, index 메소드는 어떤 값의 위치를 확인하는 메소드입니다. 

 

이 두 메소드를 리스트와 튜플 객체에서 사용하면 같은 결과를 보여줍니다.

 

리스트 객체에 문자열이나 튜플 객체를 넣으려면 append 메소드를 사용합니다. 그러면 맨 마지막에 추가됩니다.

 

리스트 객체에 튜플의 원소를 한꺼번에 저장할 수도 있습니다. 이 경우 extend 메소드를 사용하면 됩니다. 인자로 튜플 객체를 넣으면 리스트 객체의 원소로 들어갑니다.

 

리스트 객체의 원소를 없애는 메소드는 remove와 pop이 있습니다. 특정한 값만 지울 때는 remove 메소드를 사용하고, 위치를 기준으로 지울 때는 pop 메소드를 사용합니다.

 

인덱스 값을 주면 않으면 pop 메소드는 제일 마지막에 있는 원소를 삭제합니다. 인덱스 값을 주면 그 인덱스의 원소를 삭제합니다.

 

원소 정렬하기

원소를 정렬하는 경우 리스트 클래스처럼 메소드를 지원하는 내장 클래스도 있습니다. 보통 객체의  매소드로 정렬을 수행하면 객체 내부 원소들의 위치를 변경합니다.

 

내장함수에 있는 정렬 함수를 이용하면 기존 객체는 그대로 두고 새로운 복사본을 만듭니다. 새로운 객체를  하나 더 만드는 거죠.

 

정렬 알아보기

객체의 원소들을 섞는 함수를 사용하기 위해 random 모듈을 import합니다. 이 모듈에 있는 함수 shuffle을  이용하면 리스트 객체의 원소를 섞을 수 있습니다. 

 

as rd는 random이라는 이름 대신 rd를 사용하겠다는  뜻입니다.

 

리스트 객체에 있는 sort 메소드를 실행하면 새로운 객체를 만들지 않고 내부의 원소를 정렬해서 값을  바꿉니다. l변수를 실행하면 원소가 순서별로 정렬된 것을 볼 수 있습니다.

 

 

내장함수 sorted를 써서 정렬하면 새로운 객체가 만들어집니다. 두 객체의 레퍼런스(메모리 주솟값)를  비교해보면, 다른 객체라는 것을 알 수 있습니다.

 

순방향 정렬을 알아봤습니다. 역방향을 정렬하는 함수와 메소드도 있습니다. 내장 클래스인 reversed는 새로운 객체를 반환합니다. 

 

이 객체를 리스트에 넣고 별표를 붙이면 모든 원소가 분리되어 처리됩니다. 리스트에 있는 reverse 메소드를 실행하면 내부 원소들이 역방향으로 정렬됩니다.

 

문자열도 내장함수 sorted를 써서 정렬할 수 있습니다. 다만 정렬된 것은 문자열 객체가 아닌 리스트 객체인  것을 알 수 있습니다.

 

리스트 객체의 원소를 합쳐 문자열이 만들려면 join 메소드를 이용하면 됩니다. “”.join(s)는 리스트 객체의 원소를 빈칸 없이 합쳐서 문자열을 만들라는 뜻입니다.

 

튜플 객체도 정렬하면 리스트로 만들어집니다.

 

 

이 포스팅은 <반드시 알아야 할 파이썬 입문 A to Z> 책의 내용입니다. 관심있는 분은 아래 링크를 클릭하길 바랍니다.

 

반응형