파이썬 기초 정리.8

BodeulMaNN·2022년 12월 9일
0

Python

목록 보기
8/8

Unit 22. 리스트와 튜플 응용하기

  • 매서드(method)란 객체에 속한 함수이다.
  • 대표적인 매서드: append, extend, insert
  • append와 extend는 리스트 맨 뒤에 요소를 추가하지만 insert는 원하는 위치에 추가할 수 있다.
  • append활용하기
>>> a = [10, 20, 30]
>>> a.append(500)
>>> a
[10, 20, 30, 500]
>>> len(a)
4

>>> a = [10, 20, 30]
>>> a.append([500, 600])
>>> a
[10, 20, 30, [500, 600]]
>>> len(a)
4
  • extend활용하기
>>> a = [10, 20, 30]
>>> a.extend([500, 600])
>>> a
[10, 20, 30, 500, 600]
>>> len(a)
5
  • insert 활용하기
>>> a = [10, 20, 30]
>>> a.insert(0, 500)
>>> a
[500, 10, 20, 30]

>>> a = [10, 20, 30]   >>>>>>>> 리스트 끝에 요소를 추가하는 법
>>> a.insert(len(a), 500)
>>> a
[10, 20, 30, 500]

>>> a = [10, 20, 30]
>>> a.insert(2, 500)
>>> a
[10, 20, 500, 30]
>>> len(a)
4

>>> a = [10, 20, 30]    >>>>>>>> 리스트 안에 리스트: 중첩리스트
>>> a.insert(1, [500, 600])
>>> a
[10, [500, 600], 20, 30]

>>> a = [10, 20, 30]    >>>>>>>>>만약 리스트 삽입이 아닌 여러 요소를 추가하고 싶다면
>>> a[1:1] = [500, 600] >>>>>>>>>시작 인덱스와 끝안댁수룰 같게 설정 가능
>>> a
[10, 500, 600, 20, 30]
  • pop, 리스트에서 특정 인덱스의 요소 삭제하기
>>> a = [10, 20, 30]
>>> a.pop()
30
>>> a
[10, 20]

>>> a = [10, 20, 30]
>>> a.pop(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)
>>> a
[10, 30]

>>> a = [10, 20, 30, 20]  >>>>>리스트 내에 같은 값이 여러개 있을 경우 처음 찾은 값 삭제
>>> a.remove(20)
>>> a
[10, 30, 20]
  • 리스트로 스택과 큐 만들기
    지금까지 알아본 리스트의 메서드로 스택(stack)과 큐(queue)를 만들 수 있습니다. 다음과 같이 append와 pop을 호출하는 그림을 90도 돌리면 스택의 모습이 됩니다.
    여기서 pop() 대신 pop(0)을 사용하면 큐가 됩니다.
  • 물론 append(), pop(0)이 아닌 insert(0, 요소), pop()을 사용해서 추가/삭제 방향을 반대로 해도 큐가 됩니다.
    파이썬에서 스택은 리스트를 그대로 활용해도 되지만, 큐는 좀 더 효율적으로 사용할 수 있도록 덱(deque, double ended queue)이라는 자료형을 제공합니다. 덱은 양쪽 끝에서 추가/삭제가 가능한 자료 구조입니다.
decue(반복 가능한 객체)
>>> from collections import deque    # collections 모듈에서 deque를 가져옴
>>> a = deque([10, 20, 30])
>>> a
deque([10, 20, 30])
>>> a.append(500)    # 덱의 오른쪽에 500 추가
>>> a
deque([10, 20, 30, 500])
>>> a.popleft()     # 덱의 왼쪽 요소 하나 삭제
10
>>> a
deque([20, 30, 500])

deque의 append는 덱의 오른쪽에 요소를 추가하고, popleft는 덱의 왼쪽 요소를 삭제합니다.
반대로 appendleft는 덱의 왼쪽에 요소를 추가하고, pop으로 덱의 오른쪽 요소를 삭제할 수도 있습니다.

  • index 로 리스트에서 특정 값의 인덱스를 구할 수 있다.
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.index(20)
1
  • count 로 특정 값의 개수를 구할 수 있다.
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.count(20)
2
  • reverse 로 리스트의 요소 순서 반대로 뒤집기
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.reverse()
>>> a
[40, 20, 15, 30, 20, 10]
  • sort 와 sorted함수
>>> a = [10, 20, 30, 15, 20, 40]
>>> a.sort()
>>> a
[10, 15, 20, 20, 30, 40]

>>> a = [10, 20, 30, 15, 20, 40] >>>>> 함수 내림차순 정렬
>>> a.sort(reverse=True)
>>> a
[40, 30, 20, 20, 15, 10]

reverse=False를 입력할 시 sort()와 마찬가지로 오름차순 정렬

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]
  • clear 로 리스트 모든 요소 삭제
>>> a = [10, 20, 30]
>>> a.clear()
>>> a
[]

clear 대신 del a[:]가능
>>> a = [10, 20, 30]
>>> del a[:]
>>> a
[]
  • 매서드를 사용하지 않고 슬라이스로 리스트 조작하기
>>> a = [10, 20, 30]
>>> a[len(a):] = [500, 600]
>>> a
[10, 20, 30, 500, 600]
  • 리스트가 비어 있는지 확인하기
if not len(seq):    # 리스트가 비어 있으면 True

if len(seq):        # 리스트에 요소가 있으면 True

>>>>> 출력값이 0이면 False, 나머지는 전부 True

if not seq:    # 리스트가 비어 있으면 True

if seq:        # 리스트에 내용이 있으면 True

>>>>> 리스트의 인덱스 -1값을 출력해서 마지막값을 확인: 비어있을 경우 에러 발생

seq = []
if seq:               # 리스트에 요소가 있는지 확인
    print(seq[-1])    # 요소가 있을 때만 마지막 요소를 가져옴

unit 22.2 리스트의 할당과 복사 알아보기

>>> a = [0, 0, 0, 0, 0]
>>> b = a

>>> a is b
True
  • b = a와 같이 리스트를 다른 변수에 할당하면 리스트는 두 개가 될 것 같지만 실제로는 리스트가 한 개 이다.

    변수 이름만 다를 뿐 리스트 a와 b는 같은 객체이다.

  • a와 b는 같으므로 b[2] = 99와 같이 리스트 b에 요소를 변경하면 리스트 a와 b에 모두 반영된다.

>>> b[2] = 99
>>> a
[0, 0, 99, 0, 0]
>>> b
[0, 0, 99, 0, 0]
  • a와 b를 완전히 두개로 만들려면 copy매서드로 모든 요소를 복사해야 한다.
>>> a = [0, 0, 0, 0, 0]
>>> b = a.copy()
  • a와 b를 is연산자로 비교해보면 False가 나온다. 그러나 복사된 요소는 모두 같으므로 '\=\='비교하면 True가 나온다.
>>> a is b
False
>>> a == b
True
  • 이제 리스트 a와 b는 별개이므로 한쪽의 값을 변경해도 다른 리스트에 영향을 미치지 않는다. 다음과 같이 리스트 b의 요소를 변경하면 리스트a는 그래도이고 b만 바뀐다,.
profile
반갑습니다

0개의 댓글