리스트 (list)
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 = list()로 생성할 수 있다.
리스트의 인덱싱과 슬라이싱
리스트도 문자열 처럼 인덱싱과 슬라이싱이 가능하다.
대화형 인터프리터로 따라 하면서 확실하게 이해하자.
리스트의 인덱싱
# 리스트 역시 문자열 처럼 인덱싱을 적용할 수 있다.
# 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
# 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'] 리스트 바로 이 리스트에서 첫 번째 요소를 불러오기 위해 [0]을 붙여보자
>>> a[-1][0]
'a'
>>> a[-1][1]
'b'
>>> a[-1][2]
'c'
삼중 리스트에서 인덱싱하기
조금 복작하지만, 리스트는 다음과 같이 작성 할 수도 있다.
리스트 a 안에 ['a','b',['life','is']] 리스트가 포함되어 있고 그 리스트 안에 다시 ['Life','is'] 리스트가 포함된다.>>> a = [1, 2, ['a', 'b', ['Life', 'is']]]
즉, 삼중 구조의 리스트인 것이다.
# 'Life' 문자열만 끄집어 내려면 다음과 같이 해야 한다. >>> a[2][2][0] 'Life' # 리스트를 다중으로 중첩해서 사용하는 것은 혼란스럽기 때문에 자주 사용하지는 않는다.
리스트의 슬라이싱
문자열과 마찬가지로 리스트에서도 슬라이싱 기법을 적용할 수 있다.
슬라이싱은 '잘라 낸다'라는 뜻이라고 했다.
>>> a = [1, 2, 3, 4, 5]
>>> a[0:2]
[1, 2]
# 문자열에서 슬라이싱했던 예와 비교
>>> a = "12345"
>>> a[0:2]
'12'
# 문자열에서 했던 것과 사용법이 완전히 동일하다.
# 몇 가지 예를 더 살펴 보자
>>> a = [1, 2, 3, 4, 5]
>>> b = a[:2]
>>> c = a[2:]
>>> b
[1, 2]
>>> c
[3, 4, 5]
중첩된 리스트에서 슬라이싱하기
리스트가 포함된 중첩 리스트 역시 슬라이싱 방법은 똑같이 적용된다.
>>> a = [1, 2, 3, ['a', 'b', 'c'], 4, 5] >>> a[2:5] [3, ['a', 'b', 'c'], 4] >>> a[3][:2] ['a', 'b']
리스트 연산하기
리스트 역시 +를 사용해서 더할 수 있고 *를 사용해서 반복할 수 있다.
문자열과 마찬가지로 리스트에서도 되는지 직접 확인해 보자.
리스트 더하기 (+)
리스트 사이에서 +는 2개의 리스트를 합치는 기능을 한다.
문자열에서 "abc" + "def" = "abcdef"가 되는 것과 같은 이치이다.
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
리스트 반복하기 (*)
[1,2,3] 리스트가 세 번 반복되어 새로운 리스트를 만들어 낸다.
문자열에서 "abc" * 3 = "abcabcabc"가 되는 것과 같은 이치이다.
>>> a = [1, 2, 3]
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
리스트 길이 구하기
len 함수를 사용하면 된다.
>>> a = [1, 2, 3]
>>> len(a)
3
초보자가 범하기 쉬운 리스트 연산 오류
# 아래 소스 코드를 입력했을 때 결괏값은 어떻게 나올까? >>> a = [1, 2, 3] >>> a[2] + "hi" # a[2]의 값인 3과 문자열 hi가 더해져서 3hi가 출력될 것이라고 생각할 수 있다. # 하지만 다음 결과를 살펴보니 오류가 발생했다. # 오류의 원인은 무엇일까? 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" 3hi # str은 정수나 실수를 문자열로 바꾸어 주는 파이썬의 내장 함수이다.
리스트의 수정과 삭제
리스트는 값을 수정하거나 삭제할 수 있다.
리스트의 값 수정하기
a[2]의 요솟값 3이 4로 바뀌었다.
>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]
del 함수를 사용해 리스트 요소 삭제하기
del 객체
>>> a = [1, 2, 3]
>>> del a[1] # del a[x]는 x번째 요솟값을 삭제한다.
>>> a
[1, 3]
>>> a = [1, 2, 3, 4, 5]
>>> del a[2:]
>>> a
[1, 2]
리스트 관련 함수
리스트에 요소 추가하기 - append
append의 사전적 의미는 '덧붙이다, 첨부하다'이다.
이 뜻을 안다면 다음 예가 바로 이해될 것이다.
append(x)는 리스트의 맨 마지막에 x를 추가하는 함수이다.
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
리스트 안에는 어떤 자료형도 추가할 수 있다.
>>> a.append([5, 6])
>>> a
[1, 2, 3, 4, [5, 6]]
리스트 정렬 - sort
sort 함수는 리스트의 요소를 순서대로 정렬해 준다.
>>> a = [1, 4, 3, 2]
>>> a.sort()
>>> a
[1, 2, 3, 4]
# 문자 역시 알파벳 순서로 정렬할 수 있다.
>>> a = ['a', 'c', 'b']
>>> a.sort()
>>> a
['a', 'b', 'c']
리스트 뒤집기 - reverse
reverse 함수는 리스트의 역순으로 뒤집어 준다.
이때 리스트 요소들을 순서대로 정렬한 다음 다시 역순으로 정렬하는 것이 아닌 현재의 리스트를 그대로 거꾸로 뒤집는다.
>>> a = ['a', 'c', 'b']
>>> a.reverse()
>>> a
['b', 'c', 'a']
인덱스 반환 - index
index(x) 함수는 리스트에 x 값이 있으면 x의 인덱스 값(위칫값)을 리턴한다.
# 리스트 a에 있는 숫자 3의 위치는 a[2]이므로 2, 숫자 1의 위치는 a[0]이므로 0을 리턴한다.
>>> a = [1, 2, 3]
>>> a.index(3) # 3이 있는 index 출력
2
>>> a.index(1) # 1이 있는 index 출력
0
# 다음 예에서 값 0은 a 리스트에 존재하지 않기 때문에 오류가 발생한다.
>>> a.index(0) # 0이 리스트에 없어서 오류 발생
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 0 is not in list
리스트에 요소 삽입 - insert
insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다.
파이썬은 숫자를 0부터 센다는 것을 반드시 기억하자.
>>> a = [1, 2, 3]
>>> a.insert(0, 4) # 0 위치에 4 추가
>>> a
[4, 1, 2, 3]
>>> a.insert(3, 5) # 3 위치에 5 추가
>>> a
[4, 1, 2, 5, 3]
리스트 요소 제거 - remove
remove(x)는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수이다.
>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3) # 앞에서 부터 3을 찾아서 가장 먼저 나오는 3을 삭제한다.
>>> a
[1, 2, 1, 2, 3]
>>> a.remove(3) # 한번 더 실행하면 리스트 내 3 두 개를 삭제할 수 있다.
>>> a
[1, 2, 1, 2]
리스트 요소 끄집어 내기 - pop
pop()은 리스트의 맨 마지막 요소를 리턴하고 그 요소는 삭제한다.
>>> a = [1, 2, 3]
>>> a.pop() # 리스트 마지막 요솟값 3을 끄집어 내어 출력하고, 리스트에서 삭제한다.
3
>>> a
[1, 2]
>>> a = [1, 2, 3]
>>> a.pop(1)
2
>>> a
[1, 3]
리스트에 포함된 요소 x의 개수 세기 - count
count(x)는 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 리턴하는 함수이다.
>>> a = [1, 2, 3, 1]
>>> a.count(1) # 리스트 안에 1이 몇 개있는지
2
리스트 확장 - extend
extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다.
>>> a = [1, 2, 3]
>>> a.extend([4, 5]) # [1,2,3]에 [4,5]를 더한다.
>>> a
[1, 2, 3, 4, 5]
>>> b = [6, 7]
>>> a.extend(b) # [1, 2, 3, 4, 5]에 [6,7]를 더한다.
>>> a
[1, 2, 3, 4, 5, 6, 7]
a.extend([4,5])는 a += [4,5]와 동일하다.
a += [4, 5]는 a = a + [4, 5]와 동일한 표현식이다.
'🔍QA & TEST > 🧑🏻💻Python' 카테고리의 다른 글
[Python] 자료형 : 집합(Set) (4) | 2024.07.14 |
---|---|
[Python] 자료형 : 딕셔너리(Dictionary) (5) | 2024.07.14 |
[Python] 자료형 : 튜플(Tuple) (0) | 2024.07.14 |
[Python] 자료형 : 문자(String) (2) | 2024.07.14 |
[Python] 자료형 : 숫자(Number) (2) | 2024.07.14 |