-list, tuple, range, string의 공통점: 연속적(sequence)
-값이 연속적으로 이루어진 자료형을 시퀀스 자료형(sequence types)라고 부름.
-시퀀스 자료형 특징: 공통 동작과 기능 제공
-스퀀스 객체: 시퀀스 자료형으로 만든 객체
-요소(element): 시퀀스 객체에 들어있는 각 값
문법1: 값 in 시퀀스객체
문법2: 값 no in 시퀀스객체
문법1예시)
print(a)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
30 in a
True
31 in a
False
문법2예시)
print(a)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
11 not in a
True
10 not in a
False
+연산자로 두 객체 연결해서 새 객체 만들 수 있다.
문법: 시퀀스 객체 + 시퀀스 객체
예)
a = [0, 10, 20, 30]
b = [1, 11, 21, 31]
a + b
[0, 10, 20, 30, 1, 11, 21, 31]
문법: 시퀀스객체 정수 혹은 정수 시퀀스객체
*주의 0, 음수를 곱하면 빈 객체가 나오고 실수는 곱할 수 없다.
예시)
3 * [1, 2, 3, 4]
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
문법 = len(객체)
예시(리스트의 길이 구하기)
a = [10, 20, 30, 40, 50]
len(a)
5
range의 길이 구하기
len(range(0,10,2))
5
문자열 길이 구하기(공백도 문자열 길이에 포함됨)
id = "kpl 5672"
len(id)
8
-시퀀스 객체의 각 요소는 순서가 정해져있고, 이 순서를 인덱스라고 부른다.
-시퀀스 객체에 대괄호[]를 붙이고 그 안에 각 요소의 인덱스를 지정하면 해당 요소에 접근할 수 있다.
-국어사전이 ㄱ,ㄴ,ㄷ로 표시된 것과 비슷
-인덱스는 항상 0부터 시작
-문법: 시퀀스객체[인덱스]
예시
a = ["a","b","c","d"]
a[0]
'a'
a[3]
'd'
range도 인덱스로 접근 가능하다.
예시)
a = range(0,10,2)
a[1]
2
*마지막 요소의 index는 전체 길이의 -1과 같다.
a = [1,2,3,4]
a[len(a)-1]
4
시퀀스 객체는 []로 요소에 접근훈 뒤 =로 값을 할당함
문법: 시퀀스덱체[인덱스]=값
예시
a = [0,0,0,0,0]
a[0] = 10
a[1] = 20
a[2] = 30
a[3] = 40
a[4] = 50
print(a)
[10, 20, 30, 40, 50]
하지만 range, 튜플, 문자열은 읽기전용으로, 위와 같은 방식으로 값을 할당할 수 없다!
문법: del 시퀀스객체[인덱스]
예시)
print(a)
[10, 20, 30, 40, 50]
del a[0]
del a[-1]
print(a)
[20, 30, 40]
-마찬가지로 range, 튜플, 문자열은 삭제할 수 없다
-시퀀스 객체의 일부를 잘라냄
-문법: 시퀀스객체[시작인덱스:끝인덱스]
-끝인덱스 -1까지 슬라이스된다.
예시)
a = [10,20,30,40,50]
a[0:2]
[10, 20]
-문법: 시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]
print(a)
[10, 20, 30, 40, 50]
a[0:4:2]
[10, 30]
a[0:5:2]
[10, 30, 50]
-인덱스를 생략하면서 슬라이스를 할 수도 있다.
예시) a[:7] 처음부터 6(7-1)까지 슬라이스
예시) a[7:] 7부터 마지막까지 슬라이스
예시) a[:] 리스트 전체를 슬라이스
-인덱스를 생략하며 증가폭 사용하기
예시)
a = [1,2,3,4,5,6,7,8,9,10]
a[:9:3][1, 4, 7]
print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[0:len(a)][1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
예시1)
r = range(10)
list(r[1:7])
[1, 2, 3, 4, 5, 6]
예시2)
r = range(10)
list(r[:7:2])
[0, 2, 4, 6]
-시퀀스 객체는 슬라이스로 범위를 지정하여 여러 요소에 값을 할당할 수 있다.
-문법: 시퀀스객체[시작인덱스:끝인덱스] = 시퀀스객체
예시)
print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a[0:4] = [-1,-2,-3,-4]
print(a)
[-1, -2, -3, -4, 5, 6, 7, 8, 9, 10]
-요소 개수가 적다면? ->그만큼 리스트 요소수도 줄어든다.
예시)
a = [1,2,3,4,5,6,7,8,9,10]
a[0:4] = ["a"]
print(a)
['a', 5, 6, 7, 8, 9, 10]
-요소 개수가 적다면? =>리스트 요소수도 늘어난다.
예시)
a = [1,2,3,4,5,6,7,8,9,10]
a[0:4] = ["a","b","c","d","e","f","g"]
print(a)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 5, 6, 7, 8, 9, 10]
-인덱스 증가폭을 지정하여 요소 할당하기
문법: 시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭] = 시퀀스객체
예시)
a = [1,2,3,4,5,6,7,8,9,10]
a[0:10:2] = ["a","b","c","d","e"]
print(a)
['a', 2, 'b', 4, 'c', 6, 'd', 8, 'e', 10]
증가폭을 사용할 땐 반드시 슬라이스 범위 요소 개수와 할당할 요소 개수가 정확히 일치해야 한다!(불일치시 오류 발생)
튜플,range,문자열은 읽기전용으로 슬라이스로 요소 할당 불가능
-문법1: del 시퀀스객체[시작인덱스:끝인덱스]
-예시)
a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
del a[0:4]
print(a)
[5, 6, 7, 8, 9, 10]
-문법2: del 시퀀스객체[시작인덱스:끝인덱스:증가폭]
예시)
a = [1,2,3,4,5,6,7,8,9,10]
del a[0:10:2]
print(a)
[2, 4, 6, 8, 10]
*튜플, range, 문자열은 del로 슬라이스 삭제 불가!