22.10.06 - 자료형(리스트,튜플)(2)

LaMelo·2022년 10월 6일
0

jupyter

목록 보기
5/29
post-thumbnail

4. 리스트 타입의 함수 (method)

  • 종류

    • 리스트.append(추가할 아이템) : 인자값을 통채로 리스트의 마지막 아이템으로 추가, 인자값은 1개만 받음 = 1개의 아이템만 추가 가능
    • 리스트.extend(추가할 아이템) : 인자값의 아이템을 뽑아서 리스트의 마지막 아이템으로 추가, 인자값은 1개만 받음, 단 여러 개의 아이템 추가 가능
    • 리스트.insert(인덱스번호, 추가할 아이템) : 위치를 지정해서 아이템을 삽입할 수 있음, 통채로 아이템을 추가
    • 특징 : 원본에 바로 적용이 됨
  • 참고 연산자 : in 연산자 (결과값은 bool type)

  • 1) .append() : 아이템을 마지막 인덱스 번호에 추가하며 여러 아이템을 추가해도 하나의 인덱스 번호에 배정되는 특징이 있다. 그래서 2차원 리스트를 만들 수 있다.
    - 리스트를 생성하고 append()함수를 통해 리스트형 아이템도 추가할 수 있고 2차원 리스트의 아이템 역시 검색이 되는 것을 알 수 있다.

  • 2) .extend() : 리스트 형식으로 자료 추가 함수(추가 아이템 별 인덱스 번호가 모두 추가된다(append와의 차이점))

    - extend()와 append()의 차이점 :
    - 1) extend는 무조건 리스트 형태로 추가해야 한다.
    - 2) append와 달리 추가 아이템 개별 인덱스 번호가 부여

  • 3) .insert() :
    - 문법 : 대상리스트.insert(인덱스번호, 추가할 아이템)
    - 다른 함수와의 차이점 : 아이템 추가가 지정 인덱스에 실행
    - append와의 유사점 : 하나의 인덱스 번호에 모든 자료를 삽입
    -교체가 아닌 추가이기 대문에 실제 소실되는 자료는 없음

  • 4) .in() : 값 in 리스트
    - in 키워드는 특정 요소가 리스트 내에 있는지 없는지 여부를 물어본다.

    • not in 역시 가능하다. (없는가? -> True : 없음)

5. 아이템 수정하기

  • 인덱싱, 슬라이싱을 이용하여 아이템을 수정할 수 있다.
  • 리스트는 기본적으로 하나의 아이템만 수정할 수 있다.
    - 하나의 아이템 수정하기
    - 0번 인덱스에 있는 값을 [10, 20]으로 수정하기
    - 결과 : [[10, 20], 2, 3, 4]
  • 연속된 범위에 있는 여러개의 아이템 수정하기
    - 0번 인덱스만 선택 <= 슬라이싱
    - 리스트 형이 아닌 아이템 별로 추가되는 형태이다.
  • 슬라이싱으로 값을 할당할 때의 주의점 : 전달하는 값이 1개여도 리스트로 (동작원리가 extend()와 동일할기 때문에)

<< 연습문제 >>

아래 조건에 맞추어 리스트를 수정하세요.
[ 10, 99, 3, '사과', 73, '바나나' ]
조건1) '사과'를 'apple'로 수정
조건2) 99, 3 을 9, 33으로 수정
조건3) 73 을 [ 73, 74 ] 로 수정

6. 아이템 삭제하기

  • 슬라이싱

  • del 키워드 + 인덱싱/슬라이싱 (del : 파이썬 전반적으로 사용되는 키워드)

  • remove() 매소드 : 값을 기준으로 삭제

  • pop()

    • 인자값에 아무것도 입력하지 않거나 -1을 입력하면 마지막 인덱스를 삭제.
    • 특정 인덱스를 지정해 삭제할 수 도 있음.
- 1) 리스트 생성하기

- 2) 하나의 아이템 삭제하기 (빈 리스트 이용법)

- 3) 만약 슬라이싱이 아닌 인덱싱 지정 후 빈 리스트 대입한다면?(삭제가 아닌 우변에 대입하고자 했던 빈 박스가 들어감 : 삭제는 인덱싱으로 불가능)

- 4) 만약 인덱싱 없이 del 키워드를 쓴다면(a2 자체가 지워져 결과값이 뜨지 않는다(에러출력))

- 5) remove() 매소드
  • 문법 : 리스트.remove(삭제할 자료(인덱스 아님 주의!!!))
  • 인덱스 번호가 아닌 해당 자료 값을 삭제하는 것을 알 수 있다.
  • 중복된 아이템이 존재하면 가장 앞서는 인덱스 자료 하나만 삭제
  • del 키워드 활용 : del 키워드는 단일 자료 뿐만 아니라 연속된 범위(슬라이싱) 자료 삭제도 가능하다.
- 6) pop() 매소드 : 맨 마지막 자료를 삭제
  • 마지막에 위치한 값이 몇이었는지 확인시켜주고 삭제함 : 무엇을 삭제하는지 보여줘야 의도하지 않은 자료 손실을 방지 할 수 있기 때문에

7. 아이템 정렬하기

  • 함수
    • sort() : 기본동작 = 오름차순정렬(작은 값이 먼저 오고 큰 값이 나중에)
    • reverse() : 기존 리스트의 처음과 마지막 순서를 뒤집어서 나열

8. 아이템 개수 세기

  • 함수

    • 리스트.count(값) : 조회값이 리스트 내부에 몇 개 있는지 보여줌
    • len() : 파이썬 내장함수로 리스트 내부에 전체 아이템이 몇 개 있는지 보여줌


9. 리스트 복사하기

1) 얕은 복사

  • 할당기호(=)
    • 우변의 [ 1, 2, 3, 4, 5] 실제 자료값으로 힙에 저장된다.(실제 자료)
    • 하지만 a의 경우 스택에 저장되므로 우변값의 주소만 a에 저장된다 (예를들어 100번지)
    • b=a의 뜻은 a의 주소를 b도 갖는다는 의미(b도 100번지).
    • !! 그렇기 때문에 id로 a와 b의 주소를 찍어봤을 때 같은 숫자가 나오게 되는 것이다.

2) 깊은 복사

  • copy()

    • copy는 말 그대로 자료값을 복사해서 새 주소로 옮겨 놓는 것을 의미한다. 그래서 위 a,b의 주소는 같지만 a,c의 주소는 다르게 나오게 된다.
    • 실제로 내용물은 같지만 번지가 다르므로 원본 보존 후 비교를 위해 많이 사용된다.(그러므로 a를 변경해도 c에는 영향이 없게 된다.(In [116])
  • list()

    • 리스트를 이용해서도 깊은 복사가 가능하다.
  • 슬라이싱

    • 전범위 슬라이싱을 통해 e에 d를 복사하는 효과가 나타난다.


자료형 - Tuple

  • 생성 문법 기호 : ( )
  • 아이템을 수정/삭제할 수 없기 때문에 실수로 데이터가 변경되거나 삭제되는 위험이 적다.(리스트에서 기능이 빠진 형태)
  • 객체를 저장하는데 더 적은 메모리를 사용한다.
  • dictionay 자료형의 key로 활용할 수 있다.
  • 함수의 인자는 tuple 자료형으로 전달된다.

1. 생성하기

  • 문법기호 : 소괄호는 작성해도 되고 생략해도 됨, 대신 쉼표는 무조건 1개 이상 들어감
  • type이 int로 찍히는 이유 : 소괄호는 튜플로만 쓰진 않는다. (함수 호출, int 표현, 사칙연산 우선순위)
  • 반면 대괄호는 리스트에서만 쓰인다.
  • 튜플 내부의 자료 개수만큼 변수를 대입해주면 하나씩 나눠서 값을 받는다.(매칭이 안되면 에러 출력)

2. 인덱싱 (리스트와 동일)

3. 슬라이싱 (리스트와 동일)

4. 튜플 연산자

  • 산술 연산자 : +, *
  • 리스트와 동일한 문법과 동일한 양상을 보이게 된다.

5. 수정/삭제 할 수 없는 튜플

  • 앞서 말했듯 튜플은 수정/삭제 기능이 없다. (리스트와의 차이점)
  • 두 경우 다 에러 메세지가 산출되는 것을 알 수 있다.
profile
가즈아~

0개의 댓글