자료형 특집은 기본적인 부분은 최대한 배제하고 내가 몰랐던 부분 위주로 작성하려고 한다
시퀀스타입이란 값이 연속적으로 이어진 자료형이다
Python의 기본적인 시퀀스 타입(Sequence Type)은 세가지가 있다. List/Tuple/Range
(문자열 타입은 따로 정리해야 하므로 제외하도록 한다)
sequence.index(x[, i[, j]])
sequence안의 x가 (i번 index 이후, j번 index 이전에서) 첫번째로 발견되는 index(위치) 반환
- Optional Parameter
- i : 찾을 인덱스의 시작. search범위에 포함
- j: 찾을 인덱스의 끝. search범위에 미포함
아래의 예제를 보자
arr = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
# 1
print(arr.index(1))
# 2
print(arr.index(1, 3))
# 3
print(arr.index(1, 5, 9))
# 4
print(arr.index(1, 5, 8))
0
4
8
ValueError: 1 is not in list
# 1
리스트의 맨 처음 값이 1이므로 0번 index인 0을 리턴했다
# 2
3번 index(value: 4)이후부터 1을 찾아서 index를 리턴했다
# 3
5-9번 인덱스 사이에서 1을 찾아 index를 리턴했다
# 4
5-8번 인덱스 사이에는 1이 없으므로 ValueError를 리턴했다
del sequence[i : j] or [i : j : k]
시퀀스의 요소를 삭제한다.
- del sequence는 해당 시퀀스를 전부 삭제한다
- Optional Parameter
- i : 인덱스의 시작
- j: 인덱스의 끝. search범위에 미포함
- k: step
아래 예제를 보자
# 1
arr = [1, 2, 3, 4]
del arr
print(arr)
# 2
arr = [1, 2, 3, 4]
del arr[1:3]
print(arr)
# 3
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del arr[0:10:2]
print(arr)
NameError: name 'arr' is not defined
[1, 4]
[2, 4, 6, 8, 10]
# 1
arr 자체가 삭제되어 NameError를 리턴했다
# 2
1번 인덱스부터 2번인덱스까지 삭제해 [1,4]가 리턴됐다
# 3
0번 인덱스부터 9번 인덱스까지 2 step마다 삭제해 짝수가 리턴됐다
sequence.clear()
시퀀스는 남긴채 시퀀스의 요소를 모두 비운다
아래 예제를 보자
# 1
arr = [1, 2, 3, 4]
arr.clear()
print(arr)
[]
# 1
arr 리스트의 요소가 모두 비워져 빈 리스트가 리턴됐다
sequence.copy()
시퀀스를 얕은 복사(Shallow Copy)한다
- 얕은 복사(Shallow Copy) : 객체의 요소들을 복사하는 것이 아니라 객체의 참조(주소)만 복사하는 것
- 깊은 복사(Deep Copy) : 객체의 주소 및 요소를 전부 복사해 새롭게 만들어 주는 것
아래 예제를 보자
import copy
arr = [1, 2, 3, 4, [5, 6, 7], 8]
print(f"arr 주소: {hex(id(arr))[-6:]}")
print(f"요소 리스트 주소: {hex(id(arr[4]))[-6:]}")
print()
# 1
arr2 = arr
print(f"결과: {arr2}, 주소: {hex(id(arr2))[-6:]}")
print(f"메모리 주소: {hex(id(arr2[4]))[-6:]}")
# 2
arr2 = arr[:]
print(f"결과: {arr2}, 주소: {hex(id(arr2))[-6:]}")
print(f"요소 리스트 주소: {hex(id(arr2[4]))[-6:]}")
# 3
arr2 = arr.copy()
print(f"결과: {arr2}, 주소: {hex(id(arr2))[-6:]}")
print(f"요소 리스트 주소: {hex(id(arr2[4]))[-6:]}")
# 4
arr2 = copy.copy(arr)
print(f"결과: {arr2}, 주소: {hex(id(arr2))[-6:]}")
print(f"요소 리스트 주소: {hex(id(arr2[4]))[-6:]}")
# 5
arr2 = copy.deepcopy(arr)
print(f"결과: {arr2}, 주소: {hex(id(arr2))[-6:]}")
print(f"요소 리스트 주소: {hex(id(arr2[4]))[-6:]}")
* 편의상 띄어쓰기 및 slicing적용함
arr 주소: 251580
요소 리스트 주소: 25ec00
# 1
결과: [1, 2, 3, 4, [5, 6, 7], 8]
주소: 251580
요소 메모리 주소: 25ec00
# 2
결과: [1, 2, 3, 4, [5, 6, 7], 8]
주소: 26d940
요소 메모리 주소: 25ec00
# 3
결과: [1, 2, 3, 4, [5, 6, 7], 8]
주소: 26dbc0
요소 메모리 주소: 25ec00
# 4
결과: [1, 2, 3, 4, [5, 6, 7], 8]
주소: 26d940
요소 메모리 주소: 25ec00
# 5
결과: [1, 2, 3, 4, [5, 6, 7], 8]
주소: 26dbc0
요소 메모리 주소: 26dac0
# 1
arr를 arr2에 복사했다
arr2는 arr를 참조하며 두 리스트와 요소들은 같은 주소를 가리킨다(얕은 복사)
# 2
arr를 전체 슬라이싱한 arr[:]를 arr2에 복사했다
리스트의 메모리 주소가 달라져 참조가 아닌 복사가 된 것으로 보이지만 요소 중 리스트의 주소를 보면 역시 같은 주소를 가리킨다
이 역시 얕은 복사로 분류한다
# 3
arr.copy()로 arr2에 복사했다
이 역시 #2번과 같이 리스트의 메모리 주소는 달라지지만 요소의 메모리 주소는 같다(얕은 복사)
# 4
copy 모듈의 copy()함수를 사용해 arr2에 복사했다
이 또한 #2, #3의 결과와 같다(얕은 복사)
# 5
copy 모듈의 deepcopy()함수를 사용해 arr2에 복사했다
리스트의 주소 뿐만 아니라 요소의 메모리 주소도 바뀌었다(깊은 복사)
sequence.insert(i, x)
i번째 요소에 x값을 삽입한다
- i : i번째 인덱스
- x : 삽입하고자 하는 값
아래 예제를 보자
arr = [1, 2, 3, 4, 5]
# 1
arr.insert(2, 100)
print(arr)
[1, 2, 100, 3, 4, 5]
# 1
인덱스가 2인 곳에 100이 삽입됐다
sequence.pop([i])
i번째 요소를 제거하고 제거한 요소를 리턴한다
- i를 생략 시 가장 마지막 값이 제거된다
- Optional Parameter
- i : 제거하고자 하는 인덱스
아래 예제를 보자
# 1
arr = [1, 2, 3, 4, 5]
arr.pop()
print(arr)
# 2
arr = [1, 2, 3, 4, 5]
arr.pop(2)
print(arr)
# 3
arr = [1, 2, 3, 4, 5]
print(arr.pop(2))
[1, 2, 3, 4]
[1, 2, 4, 5]
3
# 1
i를 생략해 가장 마지막 값인 5가 제거됐다
# 2
인덱스가 2인 3이 제거됐다
# 3
#2와 같이 3을 제거하고 3을 리턴했다
sequence.remove(x)
시퀀스 내 x와 동등한 가장 첫번째 요소를 제거한다
- x : 제거하고자 하는 요소 값
아래 예제를 보자
arr = [1, 2, 3, 4, 5, 4, 4, 4]
# 1
arr.remove(4)
print(arr)
[1, 2, 3, 5, 4, 4, 4]
# 1
제거하고자 하는 값인 4 중에 첫번째 값이 제거됐다
sequence.reverse()
시퀀스의 요소를 반대로 출력한다
아래 예제를 보자
arr = [1, 2, 3, 4, 5, 4, 4, 4]
# 1
arr.reverse()
print(arr)
[4, 4, 4, 5, 4, 3, 2, 1]
# 1
시퀀스를 자체를 반대로 바꿔서 출력한다
생각
시퀀스 타입의 함수 중에 기억해두면 정말 쓸만한 것들이 많다!
'프로그래밍 > Python' 카테고리의 다른 글
[Django] 장고 기초 - (2) Template Language (0) | 2023.04.17 |
---|---|
[Django] 장고 기초 - (1) 개요 및 개발 환경 구성 (0) | 2023.04.14 |
[Python] 함수 사용법 - (3) itertools (2) | 2023.03.22 |
[Python] 함수 사용법 - (2) sort(), sorted() (0) | 2023.03.19 |
[Python] 함수 사용법 - (1) enumerate() (0) | 2023.02.28 |