리스트(Lists)란?
파이썬(Python)은 여러 복합적인 데이터를 그룹으로 다루기 위한 데이터 타입을 제공합니다. 바로 리스트(Lists)라고 하는 녀석입니다. 리스트는 대괄호(Square brackets)안에 콤마로 구분해서 데이터를 저장합니다. 데이터는 앞에서 배운 숫자(Numbers)나 문자열(Strings) 또는 리스트가 될 수 도 있습니다. 물론 그것뿐만이 아니라 어떤 데이터 타입의 데이터도 모두 저장할 수 있습니다. 하지만 보통은 리스트의 데이터 처리를 쉽게 하기 위해서 같은 타입의 데이터를 저장하곤 하죠. 그럼 예제를 한번 볼까요?
my_list = [1, 2, 3] # 숫자들을 가지고 있는 리스트
print(my_list)
# [1, 2, 3]
my_list = ['a', 'bc', 'def'] # 문자열들을 가지고 있는 리스트
print(my_list)
# ['a', 'bc', 'def']
my_list = [1, 'a', 10] # 문자와 숫자들을 가지고있는 리스트
print(my_list)
# [1, 'a', 10]
리스트의 아이템 가져오기
리스트는 앞서 배운 문자열(Strings)와 같이 대괄호와 아이템의 인덱스를 가지고 리스트의 아이템을 가져올 수 있습니다.
names = ['James', 'Jack', 'Jessi']
print(names[0]) # 첫번째 아이템을 가져와서 출력합니다.
# James
print(names[1]) # 두번째 아이템을 가져와서 출력합니다.
# Jack
print(names[2]) # 세번째 아이템을 가져와서 출력합니다.
# Jessi
즉, 아래와 같이 각가의 아이템은 인덱스를 가지고 있다고 할 수 있죠.
+---------+--------+---------+
| 'James' | 'Jack' | 'Jessi' |
+---------+--------+---------+
| 0 | 1 | 2 |
또한 앞서 배운 문자열과 같이 역순으로 아이템을 참조할 수 있도록 음수 인덱스도 적용할 수 있습니다. 즉, 음수 인덱스는 아래처럼 적용이 되죠.
+---------+--------+---------+
| 'James' | 'Jack' | 'Jessi' |
+---------+--------+---------+
| 0 | 1 | 2 |
| -3 | -2 | -1 |
따라서, 리스트의 마지막 아이템은 아래처럼 -1 인덱스를 주면 쉽게 가져올 수 있습니다.
names = ['James', 'Jack', 'Jessi']
print(names[-1]) # 마지막 아이템을 가져와서 출력합니다.
# Jessi
리스트 업데이트
리스트는 쉽게 아이템을 변경, 추가, 삭제 할 수 있습니다.
먼저 변경하는 방법을 알아볼께요. 리스트의 아이템을 변경하기 위해서는 아이템 인덱스로 해당아이템을 가리키게 한다음 그 값에 새로운 값을 할당해서 변경할 수 있습니다. 즉, 아래처럼 names 리스트의 첫번째 아이템을 'kathy'로 변경하기 위해선 names[0]으로 리스트의 처음을 가리키게 한다음 거기에 'kathy'라는 새로운 값을 넣어주면 됩니다.
names = ['James', 'Jack', 'Jessi']
print(names)
# ['James', 'Jack', 'Jessi']
names[0] = 'Kathy' # 리스트의 첫번째 아이템을 'Kathy'로 바꿔줍니다.
print(names)
# ['Kathy', 'Jack', 'Jessi']
이번엔 리스트에 새로운 아이템을 추가해 보도록 하겠습니다. 리스트의 append 메소드(method) 를 통해서 가능합니다.
names = ['James', 'Jack', 'Jessi']
names.append('kathy')
print(names)
# ['James', 'Jack', 'Jessi', 'kathy']
하지만 아래처럼 인데스 4에 값을 넣어서 아이템을 추가할 수는 없습니다. 왜냐하면 인덱스 접근은 해당 인덱스가 리스트에 존재할 때만 사용이 가능하기 때문입니다. 따라서 아래처럼 아직 생성되지 않은 인덱스에 값을 넣으려고 하면 파이썬 인터프리터는 에러를 발생시킵니다.
names = ['James', 'Jack', 'Jessi']
names[4] = 'kathy'
# ----> 2 names[4] = 'kathy'
# IndexError: list assignment index out of range
그럼, 리스트의 아이템을 삭제하는 방법도 알아볼겠습니다. 아이템의 삭제는 리스트의 remove 메소드(method)를 통해서 가능합니다.
names = ['James', 'Jack', 'Jessi']
names.remove('Jack')
print(names)
# ['James', 'Jessi']
만약 리스트의 아이템 인덱스를 가지고 아이템을 지우고 싶다면 어떻게 해야할까요? 예를 들어서 리스트의 첫번째 아이템을 지우기 위해서는 아래처럼 del() 함수를 사용할 수 있습니다.
names = ['James', 'Jack', 'Jessi']
del(names[0])
print(names)
# ['Jack', 'Jessi']
부분 리스트 가져오기
리스트와 문자열은 사용방법에 있어서 비슷한점이 꽤 많습니다. 리스트의 부분 리스트를 가져오는 방법은 문자열의 부분 문자열을 가져오는 방식과 동일하죠. 즉, [시작 인덱스:끝 인텍스]를 사용해서 참조를 해주면 시작과 끝 부분을 잘라서(슬라이싱, slicing) 가져올 수 있습니다. 주의할 점은 '끝 인덱스'는 잘라낼 때 포함하지 않는다는 점 입니다. 아래 예제에서 확인해 볼께요.
names = ['James', 'Jack', 'Jessi', 'Kathy']
sub = names[0:2] # 인덱스 0에서 인덱스 1까지(인덱스 2는 포함하지 않습니다)를 복사해서 가져옵니다.
print(sub)
# ['James', 'Jack']
위에서 사용했던 음수 인덱스를 사용할 수 도 있습니다.
names = ['James', 'Jack', 'Jessi', 'Kathy']
sub = names[0:-1] # 인덱스 0에서 인덱스 -1 이전까지의 문자열을 가져옵니다.
print(sub)
# ['James', 'Jack', 'Jessi']
참고로 부분 리스트는 새롭게 생성된 리스트입니다. 따라서 부분리스트의 값을 변경해도 기존 리스트는 영향을 받지 않습니다.
슬라이싱에 대해서 좀 더 자세히 알고 싶다면 아래 글을 참고하세요.
2020/09/08 - [파이썬/자주하는 질문] - 파이썬(Python) 슬라이싱(slice) 이해하기
리스트에서 아이템 존재 확인하기
리스트에서 어떤 아이템이 존재하는지 확인하기 위해선 in 키워드(keyword)를 사용 할 수 있습니다. in 키워드를 사요하면, 질의한 아이템이 리스트에 존재하면 True를 반환하고 아니면 False를 반환합니다.
names = ['James', 'Jack', 'Jessi']
'Kathy' in names
# False
리스트 합치기
두개 이상의 리스트를 합쳐서 하나의 새로운 리스트를 만들려면 덧셈기호('+')를 사용해서 리스트를 더해버리면 됩니다.
a = [1, 2, 3]
b = [4, 5]
c = a + b # 덧셈기호로 두 개의 리스트를 더하면 새로운 합쳐진 리스트가 생성됩니다)
print(c)
# [1, 2, 3, 4, 5]
리스트 데이터 타입에 대한 강의는 여기서 마치도록 하겠습니다. (리스트는 파이썬에서 가장 많이 쓰이는 데이터 타입 중 하나입니다. 따라서 여기서 사용한 예제들 외에 많은 메소드와 그 활용법이 있습니다.)
더 읽어보면 좋은 글
2020/09/13 - [파이썬/자주하는 질문] - 파이썬(Python) 두 개의 리스트를 동시에 순회하기
2020/09/09 - [파이썬/자주하는 질문] - 파이썬(Python) 리스트 복사하기
2020/09/09 - [파이썬/자주하는 질문] - 파이썬(Python) 2차원 리스트 합치기
2020/09/08 - [파이썬/자주하는 질문] - 파이썬(Python) 슬라이싱(slice) 이해하기
2020/09/13 - [파이썬/자주하는 질문] - 파이썬(Python) 두 개의 리스트를 동시에 순회하기
'파이썬 > [누구나! 완전 기초 파이썬]' 카테고리의 다른 글
#7 while, for 반복문 (0) | 2020.09.24 |
---|---|
#6 조건문 (if ~ else ~) (0) | 2020.09.23 |
#4 문자열(Strings) (0) | 2020.09.19 |
#3 숫자(Numbers) (0) | 2020.09.18 |
#2 변수(Variables) (0) | 2020.09.17 |
댓글