[부스트코스] 모두를 위한 파이썬(PY4E) 컬렉션과 리스트
이 글은 네이버 커넥트 재단에서 운영하는 부스트 코스 코칭 스터디 (모두를 위한 파이썬 2022) 과정에 부스터로 참여 하여 배운 내용을 정리 한 글이다.
추가적인 공부를 원하면 해당 강좌를 통해 공부가 가능하다.
강좌링크 : [https://www.boostcourse.org/cs122]
강좌명 : 모두를 위한 파이썬(PY4E)
오늘은 파이썬의 꽃이라고도 할 수 있는 컬렉션과 그 중 하나인 리스트에 대해 소개할 것이다.
리스트와 문자열은 비교하면서 공부할 게 많으므로 문자열을 잘 모르시는 분이라면 앞선 포스팅 문자열과 문자열파싱을 통해서 공부하는 것을 추천한다.
컬렉션
컬렉션? 무언가 묶음이라는 단어가 떠오른다.
변수는 하나의 단어에 한가지 데이터를 저장 했다면 컬렉션은 하나의 변수에 수많은 값을 넣을 수 있는 컨테이너 데이터형이다.
수많은 자료를 다룰 때 사용하고 특히 알고리즘을 공부 할 때 필수로 알아야하는 개념이다.
파이썬에는 리스트(list) 외에도 딕셔너리(dictionary) 셋(set) 튜플(tuple)을 컬렉션으로 사용한다.
리스트
주로 인덱스는 for문과 활용하여 여러 데이터를 한번에 처리할 수 있다는 특성이 있다.
리스트는 여러가지의 값을 넣을 수 있는데 list()
라는 함수 또는 대괄호([]
) 를 사용해서 리스트를 사용할 수 있고 각각의 특징에 대해 설명해 보겠다.
리스트 인덱스
food = ['pizza', 'chicken', 'gimchi'] # food = list('pizza', 'chicken', 'gimchi') 로도 구현 할 수 있다.
print(food[1])
-------------------------------
chicken
리스트는 list()
함수를 이용하여 자료를 입력해 리스트를 구현하는 것도 가능하다.
위에서 보는 것과 같이 food
라는 변수에 'pizza', 'chicken', 'gimchi'
라는 문자열 자료를 대괄호 []
안에 쉼표 ,
로 구분해 주었다.
food[1]
을 출력해 본 결과 chicken
이라는 값이 나왔다.
이는 앞선 포스팅에서 배웠던 문자열의 인덱스 개념과 비슷한데 리스트 자료형을 사용하기 위해서는 0부터 리스트의 개수 - 1 까지의 숫자로 인덱스를 접근해 자료를 구할 수 있다.
따라서 food[0]
은 'pizza'
를 food[2]
는 'gimchi'
를 저장한다.food[3]
이라는 값은 저장 하지 않았기 때문에 값을 사용하게 되면 오류가 일어난다.
food = ['pizza', 'chicken', 'gimchi']
print(food[3])
--------------------------------------
IndexError: list index out of range
인덱스 범위를 넘어가서 인덱스 에러가 난 예시이다.
리스트는 한가지 다른 컬렉션들과 다르게 특성을 가지고 있는데 인덱스에 접근하여 값을 변경할 수 있다는 점이다. 여기서 잘 알아두어야 하는 것이 추가가 아니라 변경이라는 점이다.
number = [1, 2, 3, 4, 5, 6]
print(number)
number[1] = 32
print(number)
----------------------------------
[1, 2, 3, 4, 5, 6] ## 변경 전
[1, 32, 3, 4, 5, 6] ## 변경 후
위 처럼 변경을 인덱스에 값을 임의로 변경할 수 있다.
여기서 주의 할점이 마찬가지로 인덱스의 값을 선언하지 않았는데 인덱스를 변경하려고 하면 오류가 일어난다.
number = [] # number = list() 와 동일
number[1] = 31
-----------------------------------
IndexError: list assignment index out of range
현재 number
라는 리스트에는 아무런 값도 들어 있지 않은 리스트이다. 그 리스트에 값을 변경하려고 한다. 값이 없기 때문에 리스트는 이를 인덱스에 접근 할 수 가 없다. 따라서 인덱스 오류가 나타난다.
따라서 빈 리스트를 사용하려면 append()
함수를 이용해 추가해 사용 할 수 있다.
number = []
number.append(3)
print(number)
--------------------------
[3]
리스트변수명.append(넣으려는 자료)
의 형태로 데이터를 넣을 수 있고 실제 리스트에 3이라는 데이터가 들어간 것을 볼 수 있다.
리스트의 길이
리스트도 문자열과 마찬가지로 len()
함수를 사용하면 리스트의 길이를 알수 있다.
number = [1, 2, 3, 4, 5, 6]
print(len(number))
--------------------------
6
리스트 변수에 len()
함수를 사용하여 리스트 자료의 개수를 얻었다. 위 코드를 보면 리스트에는 총 6개의 자료가 들어 있는 것을 알 수 있다.
리스트의 반복문과 range() 함수
컬렉션들은 반복문을 이용해 많은 값들을 한번에 사용하게 할 수 있다. 그 중 리스트를 반복문을 활용해 구현하는 법을 알아 보겠다.
range() 함수
range 함수는 range(시작, 종료, 단계) 순으로 숫자를 반환하는 함수로
for 문에 같이 사용하여 시작 값 숫자부터 종료 값 숫자 - 1 까지 단계값 만큼 더하거나 빼는 순으로 반환하는 함수이다.
보통 in 구문과 함께 사용한다.
for i in range(10):
print(i)
--------------------
0
1
2
3
4
5
6
7
8
9
위 코드는 종료 값만 설정한 값이다. 기본적으로 시작 값과 0
단계 값은 1
을 갖는다.
따라서 range(10)
은 range(0, 10, 1)
과 동일하다.
0부터 9까지의 수를 i
라는 변수에 넣어 출력할 수 있겠끔 짜보았다.
이를 활용하면 리스트를 유용하게 사용할 수 있는데 아까 배웠던 len()
함수를 이용하여 리스트 인덱스에 접근 할 수 있다.
number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(len(number)):
print(number[i])
number
리스트 변수의 길이를 range
의 종료값으로 설정하여 0부터 9까지의 수를 출력하였다.
이처럼 리스트의 모든 요소를 구현하기에 각각의 값을 한번에 처리해야 할 때 사용할 수 있다.
리스트와 반복문
파이썬에서는 반복문 내에서 리스트를 바로 변수에 할당하여 사용하겠끔 하는 기능을 제공하는데 문자열의 in 연산자와 비슷하지만 조금 다르다.
number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in number:
print(i)
아까 봤던 range()
함수를 이용한 반복문과 동일한 기능을 하는 코드이다.
차이점은 range()
함수를 이용할 때는 리스트의 인덱스 번호를 변수 i
에 입력받아
각각의 인덱스 값으로 리스트 자료를 구했다면
위 코드는 number
라는 리스트를 0번 인덱스부터 하나씩 변수 i
에 할당하여 리스트 자료를 출력한다.
결론 : range()함수의 i
== 리스트의 인덱스 / 리스트의 반복문 i
리스트의 자료
리스트를 in 연산자에 넣어 사용할 때는 자료의 범위를 조정 할 수 없다는 단점이 있다.
리스트의 내장함수
파이썬에서 리스트의 함수로 지원하는 함수에 대해서 알아 보겠다.
max(리스트변수) : 리스트 안에 있는 값의 최대 값을 반환한다.
min(리스트변수) : 리스트 안에 있는 값의 최소 값을 반환한다.
sum(리스트변수) : 리스트 안의 값을 전부 더 해 준다. 숫자 자료형에서만 사용이 가능하다.
리스트변수.sort() : 리스트의 자료를 오름차순으로 정렬 해준다. (주의! 리스트를 정렬하면 이전의 위치는 사라진다.)
sorted(리스트 변수) : 리스트의 자료를 오름차순으로 정렬 해준다. (sort() 함수와 달리 원래 있는 그대로 유지된다. 보통 다른 변수에 넣어서 사용)
오늘은 컬렉션의 리스트와 반복문과의 활용 방법을 알아보았다. 리스트와 같은 자료형은 알고리즘이나 자료구조를 공부할 때 기초가 되는 지식이므로 정확히 알고 사용하는 것이 중요하다. 다음에는 나머지 컬렉션의 자료형 중에서 딕셔너리와 튜플, 셋에 대해서 다루어 보겠다.