Chapter 6. String & List in Action!

파이썬은 기본적으로 문자열, 리스트, 튜플, 사전을 언어 차원에서 지원할 수 있는 스크립트 언어입니다. 오늘 알아볼 유형은 문자열과 리스트입니다. 나중에는 큐와 스택의 경우 리스트 안에 이를 Emulation (흉내내기)할 수 있는 함수를 호출하는 것으로 작업이 가능함을 확인하고 좀 더 자세히 다루어보기로 하겠습니다.


참고로 파이썬은 STL이나 .NET에서처럼 Stack과 Queue라는 것이 명확하게 존재하는 것이 아니므로 주의할 점이 있겠지요. 즉, 리스트를 사용하고 있지만 리스트가 아닌 스택이나 큐로서의 역할을 하고 있음을 명확히 알려줄만한 어떤 힌트가 포함되어야 한다는 뜻입니다. 쉬운 예로 변수 이름의 정의부터 달리한다거나 주석을 달거나 하는 등의 일이 있을 것입니다.


다시 본론으로 돌아가서, 파이썬이 기본적으로 제공하는 네 가지 유형의 데이터 구조를 분석해 보도록 하겠습니다.


* 문자열 (String)


파이썬의 문자열은 우리가 아는 문자열과 90% 같습니다. 나머지 10%가 무엇일까요? 파이썬에서의 문자열은 우리가 C/C++/Java/C#에서처럼 문자열의 특정 인덱스에 있는 글자를 치환하는 것을 지원하지 않습니다. C 계열 언어를 사용하다가 제일 어렵게 느껴지게 되는 부분이 바로 이 부분일 것입니다. 또한,  파이썬 코드에서의 문자열 표기는 작은 따옴표가 문자 하나를 나타내고, 큰 따옴표가 문자열을 나타내는 것이 아닙니다. 양쪽 표기 방식 모두 문자열을 의미합니다.


* 리스트 (List)


앞에서 예를 들었던 문자열과는 달리 리스트는 원소 단위의 편집이 가능하며 서두에서 설명하였던 그대로 큐와 스택을 에뮬레이션할 수 있는 관련 함수도 제공한다고 하였습니다.


리스트를 만들기 위해서는 다음과 같이 작성할 수 있습니다.


name = [ ‘young-hee’, ‘cheol-soo’, ‘joo-yeon’, ‘min-ji’ ]
loves = [ ‘young-hee’, [ ‘min-su’, ‘cheol-soo’ ], ‘dong-soo’, [ ‘min-ji’, ‘jinee’ ] ]

loves 리스트가 독특해 보입니다. 즉, 리스트 안에 리스트를 중첩해서 삽입하는 것이 가능함을 보여주고 있습니다.


리스트는 앞서 설명한 문자열과는 달리 훨씬 유연합니다. 원소의 개별 편집을 지원하기도 합니다. 특정 원소를 지우기 위해서는 다음과 같이 명령을 내리면 됩니다.


del name[0]
del loves[0]
del loves[0][1]

리스트에 제공되는 몇 가지 함수를 알아보도록 하지요. 우선 리스트를 사용하면서 가장 많이 사용할 정렬 함수를 살펴보면 간단합니다.


name.sort()
loves.sort()

결과를 확인해보려면 간단히 변수 이름만 입력해봐도 알 수 있습니다. 그런데 loves의 경우 중첩된 리스트에 있는 것이 앞으로 오고 개별 원소만 정렬된 상태로 되어있습니다. 무엇을 의미하는 것일까요? 중첩 리스트에서의 정렬은 재귀적이지 않음을 보여주는 것입니다.


중첩 리스트를 이용하여 간단히 행렬도 표현해볼 수 있을 것입니다. 예를 들면 [[1, 2, 3], [1, 1, 1], [3, 2, 1]] 과 같다고할 수 있겠지요.


** 돌발 퀴즈: 문자열과 리스트는 서로 형식 변환이 가능한 관계입니다. 문자열을 리스트로 바꾼 것과 리스트를 문자열로 바꾼 것의 차이점을 확인해 보시고 댓글로 그 차이점을 남겨주시기 바래요. ^^


돌발 퀴즈를 위한 힌트를 하나 드리겠습니다. 리스트와 문자열 사이의 형변환은 아래와 같이 하면 됩니다.


a = list(‘my lover’)
b = str(a)

다음 Chapter에서는 리스트에서 제공하는 큐와 스택 에뮬레이션 기능을 살펴보기로 합니다.

댓글 남기기