파이썬

Python 04. Collection Type(List)

아리벱 2024. 3. 13. 16:49

안녕하세요!

오늘은 자료구조 중 list()에 대해서 살펴볼까 합니다.

 

list()는 다양한 메소드를 포함하고 있습니다. 자주 사용하는 메소드까지 살펴보겠습니다.

 

 

1. 리스트

여러 값들을 하나의 변수에 저장하고 관리할 수 있게 해주는 순차적인 자료구조입니다.

 

1-1. 리스트의 생성

  • 리스트는 대괄호('[  ]')를 통해 생성되며 리스트 내부 요소들은 쉼표로 구분됩니다.

print(type(li1))를 통해 자료구조가 list임을 확인할 수 있습니다.

 

  •  또, 대괄호('[  ]')에 list()함수를 씌워서 만들 수도 있습니다.

  •  더 나아가, 숫자뿐만 아니라 문자열도 리스트 내부 요소가 될 수 있습니다.

  •   지금까지는 하나의 자료형 즉 숫자끼리, 문자끼리 동일한 자료형을 리스트 내부 요소로 지정했습니다. list()의 내부요소로 숫자형, 문자형, 논리형까지 한꺼번에 사용하여도 가능합니다.

 

 

 1-2. 리스트의 인덱싱

 리스트의  항목은 위치(인덱스)를 가지고 있으며, 인덱스를 사용하여 접근할  있습니다. 인덱스는 0부터 시작합니다.

 

     ※ 파이썬을 다뤄보지 않았다면 인덱스를 1부터라고 착각할 수 있는데 모든 인덱스는 0부터 시작한다는 것을 명심해야 합니다.

 

  •   인덱싱 방법은 변수 오른쪽에 [인덱싱할 숫자]를 작성합니다.
  •   리스트로 묶여있는 요소들을 인덱싱을 통해 추출하면 리스트를 벗어나 그 요소 자체의 타입을 가지게 됩니다.

index가 3번째가 마지막이므로 4번째 index는 존재하지 않습니다.

  • 이번에는 리스트 안에 리스트가 포함되어 있는 2차원의 경우를 살펴보겠습니다. 위에서 언급했듯이 인덱싱을 통해 값을 추출하면 리스트 형태를 벗어나 요소 자체의 타입을 가지게 됨을 다시 한 번 확인해봅시다.

 1-3. 리스트의 슬라이싱

 리스트의 일부분만을 추출할  있습니다.

  • 리스트의 인덱싱과 달리 리스트의 슬라이싱을 통해 일부 추출한 경우 리스트 차원이 유지가 됩니다. 리스트에서 일부 추출하여도 타입을 확인해보면 리스트임을 알 수 있습니다.

인덱스(index) 번호 0,1,2까지 추출합니다.

 

◈ 리스트의 인덱싱을 통해서 값을 출력하면 값(즉, 자료형으로)만이 출력됩니다. 반면 리스트의 슬라이싱을 통해서 값을 출력하면 리스트의 형태를 띄게 됩니다. 여기서 인덱싱을 통해 추출하면 1개의 차원이 감소되지만 슬라이싱을 통해서 추출하면 차원이 변하지 않음을 확인할 수 있습니다. 

 

1-4. 리스트의 값 변경하기

  • 뒤에서 배우게 될 튜플과 달리 리스트 값이 변경 가능하다는 특징을 지니고 있습니다.

슬라이싱을 이용하여 요소 추가하면 요소가 리스트이기 때문에 데이터만 포함되는 반면 인덱싱을 이용하영 추가한 경우 자료형이기 때문에 리스트를 취해서 리스트 안에 포함됩니다.

 

 

1-5. 리스트 연산

리스트끼리 더하거나 뺀다면 값끼리 덧셈이나 뺼셈이 실행되는 것이 아니라 리스트끼리 결합이 일어납니다.

리스트에 정수를 곱한 경우에도 분배 법칙을 통해서 각각 값에 정수가 곱해지는 것이 아니라 리스트의 반복 횟수를 의미합니다.

값끼리의 연산을 하고자 한다면 인덱싱을 통해서 값끼리의 연산하는 방법이 있습니다.

1-6. 리스트 함수와 메소드

리스트를 다루기 위한 여러 함수와 메소드들이 있습니다.

 

 1. len() 함수

 

 2. list.append() 메소드

 append()는 list에 사용되며, 왼쪽을 기준으로 시작하여 list의 끝에 새로운 하나의 요소를 추가하는 메소드입니다.

여러 값을 append를 이용해서 추가하고 싶다면 list()를 씌워서 하나의 요소로 만들어 추가할 수 있습니다.

 

 3. list.extend() 메소드

 extend()는 append()와 달리 리스트에 여러 요소를 추가할 수 있습니다. (list형태로 추가해야 합니다.)

append와 다른 점은 출력 값을 보면 append를 사용한 출력값은 2차원이지만 extend를 이용한 출력값은 1차원입니다.

 

  4. list.pop() 메소드

  pop을 이용하여 리스트 마지막 요소를 삭제하고 삭제된 요소를 반환해 줍니다.

temp에는 삭제된 요소가 저장됩니다.

  5. list.insert() 메소드

  insert를 이용해서 리스트의 특정 인덱스에 요소를 한 개만 추가합니다. 

  insert(index 번호, 추가할 요소)

 

  6. list.index() 메소드

  index를 통해 list에서 특정 값의  index를 반환해줍니다.

  7. list.reverse() 메소드

  list의 요소들의 순서를 반대로 변경 후 저장합니다. reverse메소드를 이용하면 inplace함수이기 때문에 자동으로 실행 후 저장됩니다. 

   

   reverse()를 이용하지 않고 슬라이싱을 사용하여 list의 순서를 뒤짚는 방법도 있습니다.

 

  7. list.sort() 메소드

  sort()를 통해 list의 요소를 오름차순으로 정렬할 수 있습니다. sort 또한 inplace함수입니다. 

   이번에는 sort를 통해 내림차순으로 정렬하는 방법을 보여드리겠습니다.

   위에서는 숫자를 오름차순, 내림차순으로 정렬해보았습니다. 문자 또한 오름차순, 내림차순으로 정렬할 수 있을까요?? 알파벳은 아스키코드 번호, 한글은 유니코드 번호 순서로 오름차순, 내림차순으로 정렬됩니다.

아스키 코드 표
유니코드 표

 

  8. sorted() 함수

  위에서 소개한 메소드들은 list 한해서만 사용가능합니다. sorted() 함수는 list가 아니더라도 사용 가능합니다.

  sorted() 함수를 통해서 오름차순, 내림차순으로 정렬해보겠습니다.

 

  9. count() 함수

  count()를 통해 list에서 특정 요소의 갯수를 반환할 수 있습니다.