프로그래밍을 하다 보면 서로 연관된 연속적 데이터를 하나의 변수에 모아 두면 좋은 상황이 생깁니다. Java와 같은 언어에서 List, Map과 같은 Collections API를 지원하는 것처럼, Python에서는 이를 위해 Iterable 자료형을 지원합니다. Iterable 자료형을 보면, '파이썬답다'라는 생각이 가장 먼저 듭니다. Iterable은 반복 가능한이라는 뜻인데, Python은 반복(iteration)이라는 개념을 정말 잘 지원하고 있고, Python의 간결함은 Iterable 자료형에서 오는 경우가 많으므로 잘 알고 있어야 합니다.

Iterator pattern(반복자 패턴)이 떠오를 수 있는데, 이는 사실 이미 디자인 패턴으로 정형화되어 있기 때문입니다. 연속된 데이터를 포함하고 있는 자료의 요소들을 순회할 수 있는 방법을 제공하는 패턴을 Iterator pattern이라고 합니다. 대부분의 언어에서 Iterator pattern을 문법적인 요소들로 제공(Java의 Collections 등)하고 있기는 하지만, Python만큼 언어에 자연스럽게 녹아 있는 경우는 많지 않습니다.

Python의 대표적인 iterable 자료형은 아래처럼 분류됩니다.

  • List : 가장 일반적인 iterable 자료형입니다. 값 접근, 추가, 수정, 삭제가 자유롭습니다.
  • Tuple : List와 유사하지만, Tuple은 한 번 정의하고 나면 값 접근은 가능하지만 추가, 수정, 삭제가 불가능합니다. Read-only List라고 생각할 수 있습니다.
  • Dictionary : key-value 쌍으로 이루어진 자료형입니다.
  • Set : 수학의 집합 개념과 비슷합니다. 중복을 허용하지 않으며, 순서가 보장되지 않습니다.

Python의 모든 iterable 자료형은 각 요소의 데이터 타입이 자유롭습니다. 하나의 List에 정수, 실수, 문자열 등이 함께 들어갈 수 있다는 것입니다.

List

가장 일반적인 iterable 자료형이라고 했습니다. List는 값을 다루는 부분에 있어 매우 자유롭습니다. List를 만들 때는 아래처럼 대괄호([ ])로 감싸 주고 각 요소들은 쉼표로 구분합니다.

인덱싱과 슬라이싱

Python에선 List에 접근하기 위해 타 프로그래밍 언어들의 배열 접근 방식과 비슷한 인덱싱이라는 개념을 지원하고, 추가적으로 슬라이싱이라는 개념도 있습니다. 이 둘을 이용해 각 요소에 접근하고, 특정 집합을 잘라낼 수 있습니다. 대부분의 프로그래밍 언어에서 이와 같은 인덱싱은 보통 zero-based numbering(0부터 시작)한다는 것을 참고하기 바랍니다.

del이라는 키워드를 사용했는데, 제대로 이해하려면 매직 메소드라는 개념을 알아야 하므로 여기서는 'Iterable 객체의 특정 요소를 제거하기 위한 키워드'라고만 이해하고 넘어가도록 합시다.

합과 곱

Python의 List는 서로 합하고, 정수와 곱할 수 있습니다.

값이 모두 n이고 길이가 m인 리스트 만들기

List의 곱을 이용해 값이 모두 n이고 길이가 m인 리스트를 만들 수 있습니다. [n] * m 코드를 사용하면 됩니다.

Tuple

Tuple은 Read-only(불변) List라고 생각할 수 있습니다. List처럼 나열된 값을 다루지만, 한 번 선언되고 나면 값의 생성, 수정, 삭제가 불가능합니다.

인덱싱과 슬라이싱

Tuple도 List와 동일한 형태의 인덱싱과 슬라이싱이 가능합니다.

합과 곱

Tuple도 서로 합하고 정수와 곱할 수 있습니다. 합과 곱은 해당 연산의 결과를 리턴하므로, 실제 튜플에는 변동이 생기지 않기 때문에 Read-only의 룰을 위반하지 않으므로 가능한 것입니다.


+ Recent posts