안녕하세요 모닝수잔입니다 :) 파이썬 자료형 중에서도 리스트 자료형에 대해 알아보겠습니다.
리스트(List)란 무엇일까요? ▶ 리스트(List)는 원래 목록이라는 의미를 가지고 있습니다. 우리는 여러 개의 데이터가 순서대로 정렬되어 있는 것을 목록이라고 하죠? 즉, 리스트는 여러 개의 데이터가 순서대로 그룹화된 일종의 모음(collection)이라고 생각하시면 됩니다.
리스트 자료형은 여러 개의 데이터를 한 곳에 저장할 때, 그리고 순서에 따라 그 데이터를 꺼내쓸 때 도움이 됩니다. 예를 들어서 우리가 무지개의 7색이 무슨 색인지, 첫번째 두번째 세번째 순서대로 알고 싶다고 해봅시다. print("빨간색"), print("주황색") ... 이런식으로 계속 출력해야 할까요?
리스트의 형식
리스트는 중괄호 []로 표기한다.
Rainbow = ["빨강색", "주황색", "노랑색", "초록색", "파란색", "남색", "보라색"]
아니죠. 위에서 Rainbow라는 이름의 변수를 만들고 빨주노초파남보 색상을 변수 값으로 부여했습니다. 이때, 주의할 사항은 바로 중괄호[] 입니다. 중괄호[]안에 들어간다는 것은 그룹으로 묶인다고 생각해주시면 됩니다. 이제 print(Rainbow)를 하면 어떤 값이 출력될까요? 아래 화면 빨간칸을 보시면 [] 안에 들어있는 리스트의 모든 element들이 정확하게 출력되었네요? 이제 무지개 색상을 한번에 출력할 수 있습니다.
※ 리스트의 중첩 [[]]
리스트는 중첩이 가능합니다. 즉, 리스트 안에 리스트를 또 넣을 수 있다는 뜻인데요. 아래 화면 빨간칸을 보시면 Colors라는 리스트 변수 안에 무지개 색이 들어있는 또 다른 리스트가 [] 안에 들어 있죠? Colors[2]라는 결과 값에 Rainbow라는 변수명을 부여해주면 Rainbow라는 또다른 리스트 변수가 생성되었습니다.
리스트의 인덱싱
변수[인덱스(숫자)] = 인덱스(숫자) 위치에 있는 데이터를 확인해라.
리스트는 문자열처럼 인덱싱이 가능합니다. 우리가 무지개의 7색 중에서도 2번째 색이 무슨색인지 확인하고 싶다면 인덱싱을 이용할 수 있는데요, 어떻게 표현하면 될까요?
print(Rainbow[1])
앞서 우리는 인덱스는 0부터 시작한다는 사실을 확인했었죠. 인덱스는 0부터 시작하기 때문에 무지개 1번째 색은 인덱스 0이되고, 무지개 2번째 색은 인덱스 1이 됩니다.
리스트의 함수
확인 : element의 갯수나 위치를 알려주는 함수 len(), index()
삭제 : element를 제거하거나 삭제하는 함수 remove(), del(), pop()
추가 : element를 추가하거나 삽입하는 함수 append(). insert()
이제 리스트의 형식과 인덱싱에 대한 개념을 익혔으니, 다양한 함수를 적용해서 여러가지 데이터를 추출할 수 있습니다. 비슷한 유형별 함수로 정리해봤는데요, Rainbow 변수에 적용해보겠습니다.
먼저, "확인"과 관련된 함수입니다. 리스트 안에 들어 있는 element의 갯수를 알고 싶을 때는 len(element 갯수를 알고 싶은 리스트)를 해주시면 됩니다. len(Rainbow)를 하면 Rainbow 안에는 무지개색이 들어있으니까 7이라는 결과 값이 출력되겠죠?
Rainbow라는 리스트 안에 "파란색"이 몇번째 인덱스에 있는지 알고 싶을 때는 어떻게 해야 할까요? Rainbow.index("파란색")으로 데이터를 출력해줄 수 있습니다. 리스트.index("인덱스를 확인하고 싶은 element")로 특정 element의 리스트 내 인덱스를 확인할 수 있습니다. 결과 값은 4가 되겠네요.
이번에는 "삭제"와 관련된 함수입니다. 총 3개의 함수가 있는 각각 미묘한 차이가 있답니다. 리스트 안에서 특정 인덱스에 위치하는 element를 삭제하고 싶을 때는 del 함수를 사용할 수 있습니다. del 리스트[삭제하고 싶은 element의 인덱스]를 해주시면 되는데요, del Rainbow[2]라면 Rainbow 리스트에서 2번째 인덱스에 있는 element를 삭제하게 되겠네요.
※ del 함수의 중괄호[] 사용
del 함수 사용 시 주의하실 점은 인덱스를 소괄호()가 아니라 중괄호[] 안에 넣어주셔야 한다는 점입니다. del 함수는 다른 함수와는 달리 파이썬 자체적으로 가지고 있는 함수라서인지, 다른 함수들과는 표현식이 조금 다르죠?
인덱스가 아닌 element 이름으로 삭제하고 싶을 때는 remove 함수를 사용할 수 있습니다. 리스트.remove("삭제하려는 element명")으로 표현할 수 있는데, 리스트 안에 동일한 element가 여러 개 중복으로 있다면 가장 첫번째 element를 삭제하게 됩니다. 아래 화면 빨간칸을 보시면 Rainbow.remove("빨강색")으로 "빨강색" element를 삭제했는데, Rainbow 리스트 안에 '빨강색"이라는 element가 2개 있다 보니, 첫번째 "빨강색"만 삭제되었죠.
마지막으로 pop함수는 del 함수와 비슷하게 인덱스를 사용해서 element를 삭제하는데, element를 한번 호출해주고 삭제한다는 차이점이 있습니다. Rainbow.pop(5)를 출력해보면 5번째 element를 "보라색"을 호출합니다. 이때, 동시에 Rainbow 리스트에서 "보라색"은 삭제되는데요. Rainbow 리스트를 다시 출력해보니 "보라색" element가 2개에서 1개로 줄었습니다.
※ pop함수는 del함수와 비슷하지만 인덱스를 중괄호[]가 아니라 소괄호()에 넣는다는 점 다시 한번 주의깊게 살펴보시면 좋을 것 같습니다 :)
마지막으로 "추가"와 관련된 함수입니다. append()함수는 리스트.append("가장 마지막에 추가할 element")로 표현하고 리스트의 가장 마지막에 소괄호() 안에 들어간 element를 추가해줍니다. 저는 Rainbow.append("Append Color")로 출력해봤는데 리스트의 가장 마지막에 "Append Color"라는 element가 들어가있죠?
insert()함수는 리스트.insert(element를 추가할 인덱스, 추가할 element)로 표현해줍니다. 즉, 내가 element를 어떤 위치에 넣을지 결정할 수 있다는 점이 append()함수와 다릅니다. 비교를 위해서 2개의 식을 준비해봤습니다. 우리가 잘 알다시피 인덱스는 0부터 시작하기 때문에 Rainbow.insert(0, "Insert Color1")이라는 식이 리스트의 가장 앞에 0번째 자리에 "Insert Color1"이라는 element를 추가했습니다.
저도 처음에는 왜 굳이 리스트 자료형을 써야하는지 의문이 많았는데요, 수많은 데이터를 다루다보니 정말 리스트 자료형이 도움이 된다는 것을 느끼실 수 있었답니다. 특히, 함수를 사용하는데 익숙해지시면 나중에 데이터 처리에 더 도움을 받으실거에요. 이것으로 리스트 자료형에 대한 포스팅을 마치겠습니다.