-
Chapter 02-3 리스트 자료형_1 (리스트의 인덱싱과 슬라이싱, 연산하기)Do it! 점프 투 파이썬 2022. 6. 3. 15:27
지금까지 우리는 숫자와 문자열에 대해서 알아보았다. 하지만 숫자와 문자열만으로 프로그래밍을 하기엔 부족한 점이 많다. 예를 들어 1부터 10까지의 숫자 중 홀수 모음인 1, 3, 5, 7, 9의 집합을 생각해 보자. 이런 숫자 모음을 숫자나 문자열로 표현하기는 쉽지 않다. 파이썬에는 이러한 불편함을 해소할 수 있는 자료형이 존재한다. 그것이 바로 여기에서 공부할 리스트(List)이다.
리스트는 어떻게 만들고 사용할까?
리스트를 사용하면 1, 3, 5, 7, 9숫자 모음을 다음과 같이 간단하게 표현할 수 있다.
>>> odd = [1, 3, 5, 7, 9] 리스트를 만들 때는 위에서 보는 것과 같이 대괄호[ ]로 감싸 주고 각 요솟값은 쉼표(,)로 구분해 준다.
리스트명 = [요소1, 요소2, 요소3, ...] 여러 가지 리스트의 생김새를 살펴보면 다음과 같다.
>>> a = [ ]
>>> b = [1, 2, 3]
>>> c = ['Life', 'is', 'too', 'short']
>>> d = [1, 2, 'Life', 'is']
>>> e = [1, 2, ['Life', 'is']]리스트는 a처럼 아무것도 포함하지 않아 비어 있는 리스트([ ])일 수도 있고 b처럼 숫자를 요솟값으로 가질 수도 있고 c처럼 문자열을 요솟값으로 가질 수도 있다. 또한 d처럼 숫자와 문자열을 함께 요솟값으로 가질 수도 있으며 e처럼 리스트 자체를 요솟값으로 가질 수도 있다. 즉 리스트 안에는 어떠한 자료형도 포함시킬 수 있다.
리스트의 인덱싱과 슬라이싱
리스트도 문자열처럼 인덱싱과 슬라이싱이 가능하다. 백문이 불여일견. 말로 설명하는 것보다 직접 예를 실행해 보면서 리스트의 기본 구조를 이해하는 것이 쉽다. 대화형 인터프리터로 따라 하며 확실하게 이해하자.
리스트의 인덱싱
리스트 역시 문자열처럼 인덱싱을 적용할 수 있다. 먼저 a 변수에 [1, 2, 3] 값을 설정한다.
>>> a = [1, 2, 3]
>>> a
[1, 2, 3]a[0]은 리스트 a의 첫 번째 요솟값을 말한다.
>>> a[0]
1다음 예는 리스트의 첫 번째 요소인 a[0]과 세 번째 요소인 a[2]의 값을 더한 것이다.
>>> a[0] + a[2]
4이것은 1 + 3으로 해석되어 값 4를 출력한다.
문자열을 공부할 때 이미 살펴보았지만 파이썬은 숫자를 0부터 세기 때문에 a[1]이 리스트 a의 첫 번째 요소가 아니라 a[0]이 리스트 a의 첫 번째 요소임을 명심하자. a[-1]은 문자열에서와 마찬가지로 리스트 a의 마지막 요솟값을 말한다.
>>> a[-1]
3이번에는 다음 예처럼 리스트 a를 숫자 1, 2, 3과 또 다른 리스트인 ['a', 'b', 'c']를 포함하도록 만들어 보자.
>>> a = [1, 2, 3, ['a', 'b', 'c']] 다음 예를 따라 해 보자.
>>> a[0]
1
>>> a[-1]
['a', 'b', 'c']
>>> a[3]
['a', 'b', 'c']예상한 대로 a[-1]은 마지막 요솟값 ['a', 'b', 'c']를 나타낸다. a[3]은 리스트 a의 네 번째 요소를 나타내기 때문에 마지막 요소를 나타내는 a[-1]과 동일한 결괏값을 보여 준다.
그렇다면 여기에서 리스트 a에 포함된 ['a', 'b', 'c'] 리스트에서 'a'값을 인덱싱을 사용해 끄집어낼 수 있는 방법은 없을까? 다음 예를 보자.
>>> a[-1][0]
'a'위와 같이 하면 'a'를 끄집어낼 수 있다. a[-1]이 ['a', 'b', 'c'] 리스트라는 것은 이미 말했다. 바로 이 리스트에서 첫 번째 요소를 불러오기 위해 [0]을 붙여 준 것이다.
다음 예도 마찬가지 경우이므로 어렵지 않게 이해될 것이다.
>>> a[-1][1]
'b'
>>> a[-1][2]
'c'* 삼중 리스트에서 인덱싱하기
조금 복잡하지만 다음 예를 따라 해 보자.
>>> a = [1, 2, ['a', 'b', ['Life', is']]] 리스트 a 안에 ['a', 'b', ['Life', 'is']] 리스트가 포함되어 있고, 그 리스트 안에 다시 ['Life', 'is'] 리스트가 포함되어 있다. 삼중 구조의 리스트이다.
이 경우 'Life' 문자열만 끄집어내려면 다음과 같이 해야 한다.
>>> a[2][2][0]
'Life'위 예는 리스트 a의 세 번째 요소인 리스트 ['a', 'b', ['Life', 'is']]에서 세 번째 요소인 리스트 ['Life', is']의 첫 번째 요소를 나타낸다.
이렇듯 리스트를 삼중으로 중첩해서 쓰면 혼란스럽기 때문에 자주 사용하지는 않지만 알아두는 것이 좋다.
리스트의 슬라이싱
문자열과 마찬가지로 리스트에서도 슬라이싱 기법을 적용할 수 있다. 슬라이싱은 '나눈다'는 뜻이라고 했다.
자, 그럼 리스트의 슬라이싱에 대해서 살펴보자.
>>> a = [1, 2, 3, 4, 5]
>>> a[0:2]
[1, 2]앞의 예를 문자열에서 슬라이싱했던 것과 비교해 보자.
>>> a = "12345"
>>> a[0:2]
'12'1가지가 완전히 동일하게 사용되었음을 눈치챘을 것이다. 문자열에서 했던 것과 사용법이 완전히 동일하다.
몇 가지 예를 더 들어 보자.
>>> a = [1, 2, 3, 4, 5]
>>> b = a[:2] <- 처음부터 a[1]까지
>>> c = a[2:] <- a[2]부터 마지막까지
>>> b
[1, 2]
>>> c
[3, 4, 5]b 변수는 리스트 a의 첫 번째 요소부터 두 번째 요소인 a[1]까지 나타내는 리스트이다. 물론 a[2] 값인 3은 포함되지 않는다. c라는 변수는 리스트 a의 세 번째 요소부터 끝까지 나타내는 리스트이다.
A = [1, 2, 3, 4, 5] 리스트에서 슬라이싱 기법을 사용하여 리스트 [2, 3]를 만들어 보자.
정답 ) result = A[1:3] * 중첩된 리스트에서 슬라이싱하기
리스트가 포함된 중첩 리스트 역시 슬라이싱 방법은 똑같이 적용된다.
>>> a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
>>> a[2:5] <-a[2]부터 a[4]까지
[3, ['a', 'b', 'c'], 4]
>>> a[3][:2]
['a', 'b']위 예에서 a[3]은 ['a', 'b', 'c']를 나타낸다. 따라서 a[3][:2]는 ['a', 'b', 'c']의 첫 번째 요소부터 세 번째 요소 직전까지의 값, 즉 ['a', 'b']를 나타내는 리스트가 된다.
리스트 연산하기
리스트 역시 + 기호를 사용해서 더할 수 있고 * 기호를 사용해서 반복할 수 있다.
문자열과 마찬가지로 리스트에서도 되는지 직접 확인해 보자.
1. 리스트 더하기(+)
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]리스트 사이에서 + 기호는 2개의 리스트를 합치는 기능을 한다. 문자열에서 "abc" + "def' = "abcdef"가 되는 것과 같은 이치이다.
2. 리스트 반복하기(*)
>>> a = [1, 2, 3]
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]위에서 볼 수 있듯이 [1, 2, 3] 리스트가 세 번 반복되어 새로운 리스트를 만들어낸다. 문자열에서 "abc" * 3 = "abcabcabc"가 되는 것과 같은 이치이다.
3. 리스트 길이 구하기
리스트 길이를 구하기 위해서는 다음처럼 len 함수를 사용해야 한다.
>>> a = [1, 2, 3]
>>> len(a)
3len 함수는 문자열, 리스트 외에 앞으로 배울 튜플과 딕셔너리에도 사용할 수 있는 함수이다. 실습에서 자주 사용하니 잘 기억해 두자.
* 초보자가 실수하기 쉬운 리스트 연산 오류
다음 소스 코드를 입력했을 때 결괏값은 어떻게 나올까?
>>> a = [1, 2, 3]
>>> a[2] + "hi"a[2]의 값인 3과 문자열 hi가 더해져서 3hi가 출력될 것이라고 생각할 수 있다.
하지만 다음 결과를 보자. 형 오류(TypeError)가 발생했다. 오류의 원인은 무엇일까?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'a[2]에 저장된 값은 3이라는 정수인데 "hi"는 문자열이다. 정수와 문자열은 당연히 서로 더할 수 없기 때문에 형 오류가 발생한 것이다.
만약 숫자와 문자열을 더해서 '3hi'처럼 만들고 싶다면 숫자 3을 문자 '3'으로 바꾸어 주어야 한다.
다음과 같이 할 수 있다.
>>> str(a[2]) + "hi" str 함수는 정수나 실수를 문자열의 형태로 바꾸어 주는 파이썬의 내장 함수이다.
출처 : "점프 투 파이썬"
'Do it! 점프 투 파이썬' 카테고리의 다른 글
Chapter 02-4 튜플 자료형 (0) 2022.06.03 Chapter 02-3 리스트 자료형_2. (리스트의 수정과 삭제, 관련 함수) (0) 2022.06.03 Chapter 02-2 문자열 자료형_5. (문자열 관련 함수) (0) 2022.06.03 Chapter 02-2 문자열 자료형_4. (문자열 포매팅) (0) 2022.06.02 Chapter 02-2 문자열 자료형_3. (문자열 인덱싱과 슬라이싱) (0) 2022.06.02