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. 아이템 삭제하기
- 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()
- 리스트를 이용해서도 깊은 복사가 가능하다.
-
슬라이싱
자료형 - Tuple
- 생성 문법 기호 : ( )
- 아이템을 수정/삭제할 수 없기 때문에 실수로 데이터가 변경되거나 삭제되는 위험이 적다.(리스트에서 기능이 빠진 형태)
- 객체를 저장하는데 더 적은 메모리를 사용한다.
- dictionay 자료형의 key로 활용할 수 있다.
- 함수의 인자는 tuple 자료형으로 전달된다.
1. 생성하기
- 문법기호 : 소괄호는 작성해도 되고 생략해도 됨, 대신 쉼표는 무조건 1개 이상 들어감
- type이 int로 찍히는 이유 : 소괄호는 튜플로만 쓰진 않는다. (함수 호출, int 표현, 사칙연산 우선순위)
- 반면 대괄호는 리스트에서만 쓰인다.
- 튜플 내부의 자료 개수만큼 변수를 대입해주면 하나씩 나눠서 값을 받는다.(매칭이 안되면 에러 출력)
2. 인덱싱 (리스트와 동일)
3. 슬라이싱 (리스트와 동일)
4. 튜플 연산자
- 산술 연산자 : +, *
- 리스트와 동일한 문법과 동일한 양상을 보이게 된다.
5. 수정/삭제 할 수 없는 튜플
- 앞서 말했듯 튜플은 수정/삭제 기능이 없다. (리스트와의 차이점)
- 두 경우 다 에러 메세지가 산출되는 것을 알 수 있다.