본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 22 정리(1) : 리스트 조작

by chanfficial 2022. 1. 18.

Unit 22

리스트와 튜플

  • 파이썬의 리스트는 요소를 추가하거나 삭제할 수 있고, 정보를 조회하는 메서드(함수)도 제공한다.
  • 파이썬의 리스트가 for 반복문과 결합하면 연속적이고 반복되는 값을 손쉽게 처리할 수 있다.

 

1. 리스트 조작하기

 

1-1. 리스트에 추가, 확장하기

  • 리스트의 대표적인 기능은 '요소 추가'인데, 리스트에 요소를 추가하는 메서드는 3가지가 있다.
    1. append : 요소 하나를 추가
    2. extend : 리스트를 연결하여 확장
    3. insert : 특정 인덱스에 요소 추가
  • append(요소)는 리스트 끝에 요소 하나를 추가한다.(빈 리스트에 값을 추가하는 것도 가능)
    >>> a = [10, 20, 30]
    >>> a.append(500)
    >>> a
    [10, 20, 30, 500]
    >>> len(a)
    4​
    - 이때 메서드를 호출한 리스트가 변경되며 새 리스트는 생성되지 않는다.
    >>> a = [] 
    >>> a.append(10) 
    >>> a 
    [10]​​
  • append(리스트)를 이용하면 리스트 안에 리스트를 넣을 수 있다.
    >>> a = [10, 20, 30]
    >>> a.append([500, 600])
    >>> a
    [10, 20, 30, [500, 600]] # 중첩 리스트가 됐음
    >>> len(a)
    4​
    - [500, 600]이라는 요소 하나를 리스트 a 끝에 추가했기 때문에 a의 길이는 5가 아닌 4이다.

     ※ 즉, append에서는 리스트의 길이가 항상 1씩 증가한다.

  • 추가할 요소가 여러 개 라면, 리스트 끝에 다른 리스트를 연결하여 리스트를 확장하는 extend(리스트)를 사용한다.
    >>> a = [10, 20, 30]
    >>> a.extend([500, 600])
    >>> a
    [10, 20, 30, 500, 600]
    >>> len(a)
    5​
     
  •  extend를 사용하면 리스트의 길이는 extend에 전달된 리스트의 길이만큼 증가한다.
  • 원하는 위치에 요소를 추가하고 싶을 때는 리스트의 특정 인덱스에 요소 하나를 추가할 수 있는 insert(인덱스, 요소)를 사용한다.
    >>> a = [10, 20, 30]
    >>> a.insert(2, 500) # 리스트 a의 인덱스 2에 500을 추가함
    >>> a
    [10, 20, 500, 30]
    >>> len(a)
    4​
  • insert에서 자주 사용하는 패턴은 2가지가 있다.
    1. insert(0, 요소) : 리스트의 맨 처음에 요소를 추가
    2. insert(len(리스트), 요소) : 리스트의 끝에 요소를 추가
      >>> a = [10, 20, 30]
      >>> a.insert(0, 500) # 리스트의 맨 처음에 500을 추가
      >>> a
      [500, 10, 20, 30]​
      - 그리고 insert에 마지막 인덱스보다 큰 값을 지정하면 리스트 끝에 요소 하나를 추가할 수 있다.- len(리스트) 는 마지막 인덱스보다 1이 더 크기 때문에 리스트 끝에 값을 추가할 때 자주 사용하며  a.append(500)와 같은 방법이다.
      >>> a = [10, 20, 30] 
      >>> a.insert(len(a), 500) # 리스트 a의 끝에 500을 추가 
      >>> a 
      [10, 20, 30, 500]​​
  • 특히 insert는 요소 하나를 추가하므로 insert에 리스트를 넣으면 append처럼 리스트 안에 리스트가 들어간다.
    >>> a = [10, 20, 30]
    >>> a.insert(1, [500, 600]) # 리스트 a의 인덱스 1에 리스트를 추가
    >>> a
    [10, [500, 600], 20, 30]​
  • 리스트 중간에 요소 여러 개를 추가하고 싶다면 슬라이스에 요소 할당하기를 활용하면 된다.
    >>> a = [10, 20, 30]
    >>> a[1:1] = [500, 600] # 리스트 a의 인덱스 1부터 500, 600을 추가
    >>> a
    [10, 500, 600, 20, 30]
    - a[1:1] = [500, 600]과 같이 시작 인덱스와 끝 인덱스를 같게 지정하면 해당 인덱스의 요소를 덮어쓰지 않으면서 요소 여러 개를 중간에 추가할 수 있다.

2022.01.12 - [Python 코딩도장] - 파이썬 코딩도장 Unit 11 정리 - 슬라이스에 요소 할당하기 참고

 

파이썬 코딩도장 Unit 11 정리

Unit 11 시퀀스(sequence) 자료형 활용하기 파이썬에서는 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형을 시퀀스 자료형(sequence types)라고 부른다. 시퀀스 자료형 중에서는 list, tuple,

chanfficial.tistory.com

 

 

1-2. 리스트에서 요소 삭제하기

  • 리스트에서 요소를 삭제하는 메서드는 2가지가 있다.
    1. pop : 마지막 요소 또는 특정 인덱스의 요소를 삭제
    2. remove : 특정 값을 찾아서 삭제
  • pop()은 리스트의 마지막 요소를 삭제한 뒤 삭제한 요소를 반환한다.
    >>> a = [10, 20, 30]
    >>> a.pop() # 리스트에서 마지막 요소 삭제한 뒤 30을 반환
    30
    >>> a
    [10, 20]​
  • 원하는 요소를 삭제하고 싶다면 해당 인덱스의 요소를 삭제한 뒤 삭제한 요소를 반환하는 pop(인덱스)를 사용한다.
    >>> a = [10, 20, 30]
    >>> a.pop(1) # 리스트에서 인덱스1 삭제
    20
    >>> a
    [10, 30]​
    - pop 대신 del을 사용해도 상관없긴 하다.
    >>> a = [10, 20, 30] 
    >>> del a[1] 
    >>> a 
    [10, 30]​
  • 리스트에서 원하는 값을 찾아 삭제하고 싶다면, 리스트에서 특정 값을 찾아서 삭제하는 remove(값)을 사용한다.
    >>> a = [10, 20, 30]
    >>> a.remove(20) # 리스트에서 20을 삭제
    >>> a
    [10, 30]​
    - 만약 리스트에 같은 값이 여러 개 있다면 처음 찾은 값을 삭제한다.
    >>> a = [10, 20, 30, 20] 
     >>> a.remove(20) # 처음 찾은 하나만 삭제 
     >>> a 
     [10, 30, 20]​

 

 

1-3. 리스트에서 특정 값의 인덱스와 개수 구하기

  • index(값)은 리스트에서 특정 값의 인덱스를 구하며, 같은 값이 여러 개일 경우 처음 찾은 인덱스를 구한다.(가장 작은 인덱스)
    >>> a = [10, 20, 30, 15, 20, 40]
    >>> a.index(20) # 처음 찾은 인덱스를 구함
    1​
  • count(값)은 리스트에서 특정 값의 개수를 구한다.
    >>> a = [10, 20, 30, 15, 20, 40]
    >>> a.count(20) # 리스트에서 20의 개수 구하기
    2​

 

 

1-4. 리스트의 순서를 변경하기

  • reverse()는 리스트에서 요소의 순서를 반대로 뒤집는다.
    >>> a = [10, 20, 30, 15, 20, 40]
    >>> a.reverse() # 리스트의 순서를 뒤집음
    >>> a
    [40, 20, 15, 30, 20, 10]​
  • sort()는 리스트의 요소를 작은 순서대로 정렬한다.(오름차순)
    1. sort() 또는 sort(reverse=False) : 리스트의 값을 작은 순서대로 정렬(오름차순)
    2. sort(reverse=True) : 리스트의 값을 큰 순서대로 정렬(내림차순)
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.sort() # 값을 작은 순으로 정렬(오름차순)
>>> a
[10, 15, 20, 20, 30, 40]
  • 파이썬은 리스트의 sort 메서드뿐만 아니라 내장 함수 sorted도 제공한다. 
  • sort와 sorted 모두 정렬을 해주는 함수지만, sort는 메서드를 사용한 리스트를 변경하고 sorted는 정렬된 새 리스트를 생성한다는 차이점이 있다.
    >>> a = [10, 20, 30, 15, 20, 40]
    >>> a.sort()  # a의 내용을 변경하여 정렬
    >>> a
    [10, 15, 20, 20, 30, 40]
    >>> b = [10, 20, 30, 15, 20, 40]
    >>> sorted(b)  # 정렬된 새 리스트를 생성
    [10, 15, 20, 20, 30, 40]​

 

 

1-5. 리스트의 모든 요소 삭제하기

  • clear()를 이용하여 리스트의 모든 요소를 삭제할 수 있다.
    >>> a = [10, 20, 30]
    >>> a.clear()
    >>> a
    []​
  • clear 대신 del a[ : ]와 같이 시작과 끝 인덱스를 생략하여 리스트의 모든 요소를 삭제하는 것도 가능하다.
    >>> a = [10, 20, 30]
    >>> del a[:] # 리스트의 처음부터 끝까지의 요소를 삭제
    >>> a
    []​

 

 

1-6. 리스트를 슬라이스로 조작하기

  • 리스트에서는 메서드를 사용하지 않고 슬라이스로 조작할 수 있다. - a[len(a):]는 시작 인덱스를 len(a)로 지정해서 리스트의 마지막 인덱스보다 1이 더 큰 상태인데, 이는 리스트 끝에서부터 시작하겠다는 뜻이다. (이때는 리스트의 범위를 벗어난 인덱스를 사용 가능)
    >>> a = [10, 20, 30]
    >>> a[len(a):] = [500, 600] # a.extend([500, 600])와 동일, a 끝에 다른 리스트를 연결
    >>> a
    [10, 20, 30, 500, 600]​
  • >>> a = [10, 20, 30] >>> a[len(a):] = [500] # a.append(500)과 동일, 리스트 끝에 값을 하나 추가 >>> a [10, 20, 30, 500]​

※ 리스트가 비어 있는지 확인하는 방법

  • len함수를 사용하여 if 조건문으로 판단하면 리스트(시퀀스 객체)가 비어 있는지 확인할 수 있다.
    if not len(seq):  # 리스트가 비어 있으면 True
    if len(seq):      # 리스트에 요소가 있으면 True​
  • 파이썬에서는 위의 방법보다 리스트(시퀀스 객체)를 바로 if 조건문으로 판단하는 방법을 권장한다.
    if not seq:  # 리스트가 비어 있으면 True
    if seq:      # 리스트에 내용이 있으면 True​
  • 리스트가 비어 있는지 확인하는 방법은 리스트의 미지막 요소에 접근할 때 유용하게 사용할 수 있다.
    >>> seq = [10, 20, 30]
    >>> seq[-1] # 리스트의 마지막 요소에 접근할 때는 인덱스를 -1로 지정
    30​
  • 리스트가 비어 있을 경우에는 인덱스를 -1로 지정할 수 없다.
    만약 리스트가 비어 있을 경우에는 인덱스를 -1로 지정하면 에러가 발생합니다.
    >>> a = []
    >>> a[-1]
    Traceback (most recent call last):
      File "<pyshell#3>", line 1, in <module>
        a[-1]
    IndexError: list index out of range​
    - 이때는 if 조건문을 활용하여 리스트가 요소에 있을 때만 마지막 요소를 가져오게 한다.
    seq = []
    if seq: # 리스트에 요소가 있는지 확인
    	print(seq[-1]) # 요소가 있을 때만(True일때만) 마지막 요소를 가져옴​