Python - Python 시퀀스 자료형 활용하기
Python
- Python 기본
- Python 숫자 계산하기
- Python 변수 만들기
- Python 출력 방법
- Python 불과 비교, 논리 연산자
- Python 문자열 사용하기
- Python 리스트와 튜플 사용하기
- Python 시퀀스 자료형 활용하기
- Python 딕셔너리 사용하기
- Python if 조건문으로 특정 조건일 때 코드 실행하기
- Python else를 사용하여 두 방향으로 분기하기
- Python elif를 사용하여 두 방향으로 분기하기
- Python for 반복문
- Python while 반복문
- Python break, continue로 반복문 제어하기
- Python 중첩루프
- Python FizzBuzz 문제
- Python 터틀 그래픽스로 그림 그리기
- Python 리스트와 튜플 응용하기
- Python 리스트와 튜플 응용하기 - 2
- Python 2차원 리스트 사용하기
- Python 문자열 응용하기
- Python 딕셔너리 응용하기
- Python 세트 사용하기
- Python 파일 사용하기
- Python 회문 판별과 N-gram 만들기
- Python 함수 사용하기
- Python 함수에서 위치 인수와 키워드 인수 사용하기
- Python 함수에서 재귀호출 사용하기
- Python 람다 표현식 사용하기
- Python 클로저 사용하기
- Python 클래스 사용하기
- Python 클래스 속성과 정적, 클래스 메서드 사용하기
- Python 클래스 상속 사용하기
- Python 두 점 사이의 거리 구하기
- Python 예외 처리 사용하기
- Python 이터레이터 사용하기
- Python 제너레이터 사용하기
- Python 코루틴 사용하기
- Python 데코레이터 사용하기
- Python 정규표현식 사용하기
- Python 모듈과 패키지 사용하기
- Python 모듈과 패키지 만들기
Python 시퀀스 자료형 활용하기
지금까지 사용했던 리스트, 튜플, range, 문자열을 잘 보면 공통점이 있다. 이들 모두 값이 연속적(sequence)으로 이어져 있다는 점이다. 파이썬에서는 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형을 시퀀스 자료형(sequence types)라고 부른다.
—
1. 시퀀스 자료형의 공통 기능 사용하기
시퀀스 자료형의 가장 큰 특징은 공통된 동작과 기능을 제공한다는 점이다. 따라서 시퀀스 자료형의 기본적인 사용 방법을 익혀 두면 나중에 어떠한 시퀀스 자료형을 접하게 되더라도 큰 어려움 없이 바로 사용할 수 있다.
시퀀스 자료형으로 만든 객체를 시퀀스 객체라고 하며, 시퀀스 객체에 들어있는 각 값을 요소(element)라고 부른다.
특정 값이 있는지 확인하기
시퀀스 객체 안에 특정 값이 있는지 확인하는 방법이다. 아래 코드는 a에서 30과 100이 있는지 확인한다. 확인하려는 값이 있으면 True 없으면 False가 나온다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
30 in a
True
100 in a
False
in 앞에 not을 붙이면 값이 없는지 확인한다. 없으면 True 있으면 False가 나온다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
100 not in a
True
30 not in a
False
튜플, range, 문자열 에도 사용 가능하다.
43 in (38, 76, 43, 62, 19)
True
1 in range(10)
True
'p' in 'Hello, Python'
False
시퀀스 객체 연결하기
시퀀스 객체는 +연산자를 사용하여 객체를 서로 연결하여 새 객체를 만들 수 있다.
a = [0, 10, 20, 30]
b = [9, 8, 7, 6]
a + b
[0, 10, 20, 30, 9, 8, 7, 6]
range는 +연산자로 객체를 연결할 수 없다.
range(0, 10) + range(10, 20)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
range(0, 10) + range(10, 20)
TypeError: unsupported operand type(s) for +: 'range' and 'range'
range를 연결하고 싶다면 리스트 또는 튜플로 연결해야 한다.
list(range(0, 10)) + list(range(10, 20))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
tuple(range(0, 10)) + tuple(range(10, 20))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
문자열은 +연산자로 여러 문자열을 연결할 수 있다.
'Hello, ' + 'world!'
'Hello, world!'
문자열에 정수,실수를 연결하고 싶다면 str을 사용해 숫자를 문자열로 변환해 연결해 주면 된다.
'Hello, ' + str(10) # str을 사용하여 정수를 문자열로 변환
'Hello, 10'
'Hello, ' + str(1.5) # str을 사용하여 실수를 문자열로 변환
'Hello, 1.5'
시퀀스 객체 반복하기
*연산자를 사용하면 시퀀스 객체를 특정 횟수만큼 반복할 수 있다. 0또는 음수를 곱하면 빈 객체가 나오며 실수는 곱할 수 없다.
[0, 10, 20, 30] * 3
[0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30]
[0, 10, 20, 30] * 0
[]
[0, 10, 20, 30] * -1
[]
[0, 10, 20, 30] * 3.2
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
[0, 10, 20, 30] * 3.2
TypeError: can't multiply sequence by non-int of type 'float'
range는 연결과 마찬가지로 *연산자를 사용해 반복할 수 없다. range를 리스트나 튜플로 만들어 연결할 수 있다.
list(range(0, 5, 2)) * 3
[0, 2, 4, 0, 2, 4, 0, 2, 4]
tuple(range(0, 5, 2)) * 3
(0, 2, 4, 0, 2, 4, 0, 2, 4)
문자열은 *연산자를 사용해 반복이 가능하다.
'ansang' * 3
'ansangansangansang'
2. 시퀀스 객체의 요소 개수 구하기
요소의 길이는 len함수를 사용해 구할 수 있다.
리스트와 튜플의 요소 개수 구하기
리스트의 요소는 아래와 같이 구할 수 있다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
len(a)
10
튜플도 마찬가지 이다.
b = (38, 76, 43, 62, 19)
len(b)
5
range에 len을 사용하면 숫자가 생성되는 개수를 구할 수 있다. 예제에서는 요소의 수가 적어 알기 쉽지만 실무에서는 요소가 많고 추가 삭제 반복을 하기 때문에 len을 사용해야한다.
문자열의 길이 구하기
문자열도 시퀀스 자료형이므로 len 함수를 사용하면 된다. 공백도 포함이되고 문자열을 묶은 따옴표는 제외된다. 따옴표는 문자열을 표현하는 문법일뿐 길이에는 포함되지 않는다.(문자열의 큰따옴표와 작은따옴표의 경우는 포함된다.)
hello = 'Hello, world!'
len(hello)
13
hello = '안녕하세요'
len(hello)
5
3. 인덱스 사용하기
시퀀스 객체에 들어있는 요소에 접근하는 방법을 알아보자. 시퀀스 객체의 각 요소는 순서가 정해져 있으며, 이 순서를 인덱스라고 부른다. 인덱스의 시작 숫자는 항상 0부터 시작하는것을 기억하자.
리스트
a = [38, 21, 53, 62, 19]
a[0] # 리스트의 첫 번째(인덱스 0) 요소 출력
38
a[2] # 리스트의 세 번째(인덱스 2) 요소 출력
53
a[4] # 리스트의 다섯 번째(인덱스 4) 요소 출력
19
튜플
b = (38, 21, 53, 62, 19)
b[0] # 튜플의 첫 번째(인덱스 0) 요소 출력
38
range
r = range(0, 10, 2) # 02468
r[2] # range의 세 번째(인덱스 2) 요소 출력
4
문자열
hello = 'Ansang coding'
hello[7] # 문자열의 여덟 번째(인덱스 7) 요소 출력
'c'
시퀀스 객체에 인덱스를 지정하지 않으면 해당 객체 전체를 뜻한다. 시퀀스 객체에서 []를 사용하면 실제로는 __getitem__메서드를 호출하는 것과 같다. 따라서 __getitem__을 사용해 요소를 가져올 수도 있다.
a = [38, 21, 53, 62, 19]
a.__getitem__(1)
21
음수 인덱스 지정하기
인덱스를 음수로 지정하면 요소의 뒤에서부터 접근한다. -1은 뒤에서 첫번째를 의미하게 되는것이다.
# 리스트
a = [38, 21, 53, 62, 19]
a[-1] # 리스트의 뒤에서 첫 번째(인덱스 -1) 요소 출력
19
a[-5] # 리스트의 뒤에서 다섯 번째(인덱스 -5) 요소 출력
38
#튜플
b = (38, 21, 53, 62, 19)
b[-1] # 튜플의 뒤에서 첫 번째(인덱스 -1) 요소 출력
19
#range
r = range(0, 10, 2)
r[-3] # range의 뒤에서 세 번째(인덱스 -3) 요소 출력
4
#문자열
hello = 'Ansang coding'
hello[-4] # 문자열의 뒤에서 네 번째(인덱스 -4) 요소 출력
'd'
인덱스의 범위를 벗어나면?
시퀀스 객체의 인덱스는 요소의 숫자보다 하나 작은 값이 마지막 인덱스 값이 된다.
a = [38, 21, 53, 62, 19]
a[5] # 인덱스 5는 범위를 벗어났으므로 에러
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a[5]
IndexError: list index out of range
마지막 요소에 접근하기
시퀀스 객체의 인덱스를 -1로 지정하게되면 뒤에서 첫번째 요소에 접근한다. 시퀀스 객체의 마지막 요소에 접근하는 다른 방법을 알아보자.
아래와 같이 len함수를 사용해 길이를 구하고 그 값을 그대로 넣으면 에러가 발생한다. 인덱스 값은 요소의 전체 숫자보다 하나가 작기 때문이다.
a = [38, 21, 53, 62, 19]
a[len(a)]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
a[len(a)]
IndexError: list index out of range
요소의 길이를 구하고 -1을 해주게끔 코드를 바꿔보자.
a = [38, 21, 53, 62, 19]
a[len(a)-1]
# 19
요소에 값 할당하기
시퀀스 객체중 리스트만이 요소를 수정, 변경, 삭제할 수 있다. 튜플, range, 문자열은 값 할당이 불가능하다. 시퀀스 객체는 []로 요소에 접근한뒤 = 로 값을 할당한다. 이때도 볌위를 벗어난 인덱스는 지정할 수 없다.
a = [0, 0, 0, 0, 0] # 0이 5개 들어있는 리스트
a[0] = 38
a[1] = 21
a[2] = 53
a[3] = 62
a[4] = 19
a
[38, 21, 53, 62, 19]
a[0]
38
a[4]
19
# 인덱스 범위를 벗어나 지정할 경우
a[5] = 90
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
a[5] = 90
IndexError: list assignment index out of range
del로 요소 삭제하기
마찬가지로 리스트만 삭제가 가능하고 튜플, range, 문자열은 불가능하다. 삭제 방법은 del 시퀀스객체[index]로 삭제할 수 있다.
a = [38, 21, 53, 62, 19]
del a[2]
a
[38, 21, 62, 19]
4. 슬라이스 사용하기
슬라이스는 시퀀스 객체의 일부를 잘라내 사용하는 방법이다. 다음은 리스트의 일부를 잘라내 새 리스트를 만든다. 인덱스의 끝 값은 가져오려는 범위에 포함되지 않는것을 기억하자.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[0:4] # 인덱스의 0부터 3까지 잘라내 새 리스트를 만든다.
[0, 10, 20, 30]
# 처음부터 끝까지 가져오려고 할때
a[0:10] # 요소의 숫자는 9개지만 모두 가져오려고 한다면 10을 끝인덱스로 지정해야한다.
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
슬라이스를 했을 때 실제로 가져오는 요소는 시작 인덱스 부터 끝인덱스 -1까지 이다.
리스트의 중간 부분 가져오기
리스트 중간의 부분을 가져오는 방법도 동일하다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[4:7] # 4, 5, 6 인덱스를 가져왔다.
[40, 50, 60]
인덱스를 음수로 지정하면 마찬가지로 끝인덱스의 -1까지 가져온다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[4:-1] # 인덱스 4부터 인덱스 -2까지
[40, 50, 60, 70, 80]
인덱스 증가폭 사용하기
슬라이스는 range처럼 인덱스의 증가폭을 지정해 범위내의 요소를 가져올 수 있다.
다음은 인덱스를 3씩 증가시키며 요소를 가져온다. 주의할 점은 인덱스의 증가폭이지 요소의 값 증가폭이 아니라는 점이다. 인덱스 2의값 그다음 5의값 그다음 8의 값을 가져올것 같지만 슬라이스는 마지막 인덱스값의 -1까지만 가져오게 되어있고 마지막 인덱스 8의 -1인 7까지에서 3씩 증가시킨 값인 2와 5의 값만을 가져오게 된다. 인덱스의 증가폭을 지정하더라도 가져오려는 인덱스를 넘어설 수 없다는 것이다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:8:3] # 인덱스 2~8(-1인 7까지)의 값중 3씩증가시킨 인덱스 2와 5의 값
[20, 50]
만약 끝 인덱스 -1과 증가폭으로 증가한 인덱스가 일치하면 해당 요소까지 가져올 수 있다. 다음은 끝 인덱스를 9로 지정하여 인덱스 8의 80까지 가져온다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:9:3] # 인덱스 2~9(-1인 8까지)의 값중 3씩증가시킨 인덱스 2, 5, 8의 값
[20, 50, 80]
인덱스 생략하기
슬라이스 사용시 시작인덱스와 끝인덱스를 생략할 수 있다. 생략하는 방법은 객체의 길이를 몰라도 값을 가져올 수 있기 때문에 자주 쓰이는 방식이다. 주로 시퀀스 객체의 마지막 일부분만 출력할 때 사용한다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[:7] # 인덱스 0부터 6까지의 값을 가져온다.
[0, 10, 20, 30, 40, 50, 60]
a[7:] # 인덱스 7부터 끝까지의 값을 가져온다.
[70, 80, 90]
a[:] # 인덱스 처음부터 끝까지의 값을 가져온다.
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
인덱스를 생략하면서 증가폭 사용하기
인덱스의 처음또는 끝 값을 생략하면서 증가폭을 가지고 값을 가져올수도 있다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[:7:2] # 인덱스 0(처음)부터 6까지의 값중 인덱스 값을 2씩 증가시킨 인덱스의 값을 가져온다. 0, 2, 4, 6의 값을 가져온다.
[0, 20, 40, 60]
a[7::2] # 인덱스 7부터 끝까지의 값중 인덱스 값을 2씩 증가시킨 인덱스 값을 가져온다. 인덱스 7, 9의 값을 가져온다.
[70, 90]
a[::2] # 인덱스 처음부터 끝까지의 값중 인덱스 값을 2 씩증가시킨 인덱스 값을 가져온다. 인덱스 0, 2, 4, 6, 8의 값을 가져온다.
[0, 20, 40, 60, 80]
a[5:1:-1] # 인덱스 5부터 2까지의 값중 인덱스의 값을 -1씩 감소시킨 인덱스 값을 가져온다. 인덱스 5, 4, 3, 2의 값을 가져온다.
[50, 40, 30, 20]
a[::] # 시작, 끝, 증가폭을 모두 생략하면 리스트 전체를 가져온다. 즉, a[:]와 a[::]의 결과는 같다.
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[::-1] # 리스트 전체에서 인덱스를 1씩 감소시키며 값을 가져옴으로 리스트를 반대로 뒤집게 된다.
[90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
len 응용하기
len을 사용하여 리스트 전체를 가져올 수 있다. len(a)의 값은 10이기 때문에 인덱스 9까지의 값을 가져오게 된다. 요소의 갯수가 9개이기 때문에 모든 값을 가져올 수 있다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[0:len(a)] # 인덱스 0부터 9까지의 값을 가져온다.
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[:len(a)] # 시작 인덱스를 생략
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
튜플, range, 문자열에 슬라이스 사용하기
튜플, range, 문자열도 시퀀스 자료형이기 때문에 슬라이스를 사용할 수 있다.
b = (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
b[4:7] # 인덱스 4부터 6까지의 값
(40, 50, 60)
b[4:] # 인덱스 4부터 마지막까지의 값
(40, 50, 60, 70, 80, 90)
b[:7:2] # 인덱스 처음부터 6까지 중 2씩 증가한 값 0, 2, 4, 6
(0, 20, 40, 60)
range도 연속된 숫자를 만든다. range에 슬라이스를 사용하면 지정된 범위의 숫자를 생성하는 range객체를 새로 만든다.
r = range(10)# 0~9까지의 값을 만든다.
r
range(0, 10)
r[4:7] # 인덱스 4부터 6까지 숫자 4, 5, 6을 생성하는 range객체를 만든다.
range(4, 7)
r[4:] # 인덱스 4부터 끝까지 숫자 4, 5, 6, 7, 8, 9를 생성하는 range객체를 만든다.
range(4, 10)
r[4:10] # 인덱스 4부터 9까지 숫자 4, 5, 6, 7, 8, 9를 생성하는 range객체를 만든다.
range(4, 10)
r[:7:2] # 인덱스 0부터 6까지 증가폭2를 갖는 인덱스 값에 해당되는 0, 2, 4, 6을 생성하는 range객체를 만든다.
range(0, 7, 2)
range는 리스트 튜플과 달리 요소가 모두 표시되지 않고 범위만 표시한다. list에 넣어 표시하게 만들어보자.
list(r[4:7])
[4, 5, 6]
list(r[4:])
[4, 5, 6, 7, 8, 9]
list(r[4:10])
[4, 5, 6, 7, 8, 9]
list(r[:7:2])
[0, 2, 4, 6]
문자열도 시퀀스 자료형이기 때문에 슬라이스를 사용할 수 있다.
hello = 'Hello, world!'
hello[2:9]
'llo, wo'
hello[2:]
'llo, world!'
hello[:9:2]
'Hlo o
파이썬에서는 slice객체를 사용하여 시퀀스 객체를 잘라낼 수도 있다. 다음과 같이 시퀀스 객체의 []또는 getitem 메서드에 slice객체를 넣어주면 지정된 범위만큼 잘라내서 새 객체를 만든다.
range(10)[slice(4, 7, 2)]
range(4, 7, 2)
range(10).__getitem__(slice(4, 7, 2))
range(4, 7, 2)
#슬라이스 객체를 하나만 만든뒤 여러 시퀀스 객체에 사용하는 방법
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
s = slice(4, 7)
a[s]
[40, 50, 60]
r = range(10)
r[s]
range(4, 7)
list(range(4,7))
[4, 5, 6]
hello = 'Hello, world!'
hello[s]
'o,
슬라이스에 요소 할당하기
시퀀스 객체는 슬라이스로 범위를 지정해 여러 요소의 값을 할당할 수 있다. 리스트를 만들고 특정 범위의 요소에 값을 할당해 보자. 이렇게 범위를 지정해서 요소를 할당했을 경우에는 원래 있던 리스트가 변경되며 새 리스트는 생성되지 않는다.
- 시퀀스객체[시작인덱스:끝인덱스] = 시퀀스객체
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:5] = ['a', 'b', 'c'] # 인덱스 2부터 4까지의 값을 a, b, c로 값을 할당한다.
a
[0, 10, 'a', 'b', 'c', 50, 60, 70, 80, 90]
슬라이스 범위와 할당할 리스트의 요소 개수를 맞추지 않아도 알아서 할당된다. 개수가 적으면 리스트 요소도 줄어들고 많으면 요소 개수도 늘어난다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:5] = ['a'] # 인덱스 2부터 4까지에 값 1개를 할당하여 요소의 개수가 줄어든다.
a
[0, 10, 'a', 50, 60, 70, 80, 90]
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:5] = ['a', 'b', 'c', 'd', 'e'] # 인덱스 2부터 4까지 값 5개를 할당하여 요소의 개수가 늘어난다.
a
[0, 10, 'a', 'b', 'c', 'd', 'e', 50, 60, 70, 80, 90]
슬라이스는 인덱스 증가폭을 지정할 수 있었다. 이번에는 인덱스 증가폭을 지정하여 인덱슬를 건너뛰면서 할당해보자. 단, 인덱스 증가폭을 지정할때는 슬라이스 범위의 요소 개수와 할당할 요소 개수가 정확히 일치해야 한다.
- 시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭] = 시퀀스객체
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:8:2] = ['a', 'b', 'c'] # 인덱스 2부터 7까지 2씩증가시키면서 a,b,c를 2씩 증가된 인덱스 위치에 할당.
a
[0, 10, 'a', 30, 'b', 50, 'c', 70, 80, 90]
# 슬라이스 범위의 요소 개수와 할당할 요소 개수가 정확히 일치해야 한다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[2:8:2] = ['a', 'b']
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a[2:8:2] = ['a', 'b']
ValueError: attempt to assign sequence of size 2 to extended slice of size 3
튜플, range, 문자열은 슬라이스 범위를 지정하더라도 요소를 할당할 수 없다.
b = (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
b[2:5] = ('a', 'b', 'c')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
b[2:5] = ('a', 'b', 'c')
TypeError: 'tuple' object does not support item assignment
r = range(10)
r[2:5] = range(0, 3)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
r[2:5] = range(0, 3)
TypeError: 'range' object does not support item assignment
hello = 'Hello, world!'
hello[7:13] = 'Python'
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
hello[7:13] = 'Python'
TypeError: 'str' object does not support item assignment
del로 슬라이스 삭제하기
시퀀스 객체의 슬라이스를 삭제해보자. 슬라이스 삭제는 다음과 같이 del뒤에 삭제할 범위를 지정해주면 된다.
- del 시퀀스객체[시작인덱스:끝인덱스]
다음은 리스트의 인덱스 2부터4까지 요소를 삭제한다. del로 요소를 삭제하면 원래 있던 리스트가 변경되며 새 리스트는 생성되지 않는다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
del a[2:5] # 리스트a에서 2~4까지의 요소를 삭제.
a
[0, 10, 50, 60, 70, 80, 90]
인덱스 증가폭을 지정하면 인덱스를 건너뛰면서 삭제한다.
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
del a[2:8:2] # 인덱스 2부터 7까지 2씩증가시키며 삭제. 인덱스 2, 4, 6의 값이 삭제된다.
a
[0, 10, 30, 50, 70, 80, 90]
마찬가지로 튜플, range, 문자열은 del로 슬라이스를 삭제할 수 없다.
b = (0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
del b[2:5]
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
del b[2:5]
TypeError: 'tuple' object does not support item deletion
r = range(10)
del r[2:5]
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
del r[2:5]
TypeError: 'range' object does not support item deletion
hello = 'Hello, world!'
del hello[2:9]
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
del hello[2:9]
TypeError: 'str' object does not support item deletion
Subscribe to My Coding Practice Gym
Get the latest posts delivered right to your inbox