리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형
값 in 시퀀스객체
값 not in 시퀀스객체
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> 100 not in a
True
>>> 30 not in a
False
>>> 43 in (38, 76, 43, 62, 19)
True
>>> 1 in range(10)
True
>>> 'P' in 'Hello, Python'
True
연산자를 사용하여 객체를 서로 연결하여 새 객체를 만들 수 있다.
시퀀스객체1 + 시퀀스객체2
시퀀스 자료형 중에서 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, ' + str(10) # str을 사용하여 정수를 문자열로 변환 'Hello, 10' >> 'Hello, ' + str(1.5) # str을 사용하여 실수를 문자열로 변환 'Hello, 1.5'
>>> [0, 10, 20, 30] * 3
[0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30]
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)
len(시퀀스객체)
range의 숫자 생성 개수도 구할 수 있다.
>> len(range(0, 10, 2)) 5
문자열의 길이도 구할 수 있다. (공백 포함)
>> hello = 'Hello, world!' >> len(hello) 13
시퀀스객체[인덱스]
range, 튜플, 리스트, 문자열 시퀀스 객체 모두 인덱스로 접근 가능하다. 다음은 range의 요소 접근 방법이다.
>> r = range(0, 10, 2) >> r[2] # range의 세 번째(인덱스 2) 요소 출력 4
__getitem__ 메서드로 요소 호출 가능
>> a = [38, 21, 53, 62, 19] >> a.__getitem__(1) 21
>>> a = [38, 21, 53, 62, 19]
>>> a[-1] # 리스트의 뒤에서 첫 번째(인덱스 -1) 요소 출력
19
>>> a[-5] # 리스트의 뒤에서 다섯 번째(인덱스 -5) 요소 출력
38
마지막 인덱스에 접근하기.
1. -1로 마지막 인덱스를 구한다.
2. len()으로 시퀀스 객체의 길이를 구한 후 -1로 마지막 인덱스를 구한다. ex) a[len(a)-1]
리스트만 가능하다. 튜플, 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
삭제
del 시퀀스객체[인덱스]
>>> a = [38, 21, 53, 62, 19]
>>> del a[2]
>>> a
[38, 21, 62, 19]
시퀀스객체[시작인덱스:끝인덱스]
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[0:4] # 인덱스 0부터 3까지 잘라서 새 리스트를 만듦
[0, 10, 20, 30] # 끝인덱스 -1 까지 가져옴
시작인덱스, 끝인덱스 모두 생략 가능. 생략 시 처음 값, 마지막 값으로 할당된다.
>>> a[4:-1] # 인덱스 4부터 -2까지 요소 5개를 가져옴
[40, 50, 60, 70, 80]
시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:8:3] # 인덱스 2부터 3씩 증가시키면서 인덱스 7까지 가져옴
[20, 50]
>>> a[:len(a)] #시작 인덱스 생략, 끝 인덱스에 len(a) 지정하여 리스트 전체를 가져옴
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
시퀀스객체[시작인덱스:끝인덱스] = 시퀀스객체
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:5] = ['a', 'b', 'c'] # 인덱스 2부터 4까지 값 할당
>>> 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]
단 인덱스 증가폭을 지정했을 때는 슬라이스 범위의 요소 개수와 할당할 요소 개수가 일치해야 한다.
del 시퀀스객체[시작인덱스:끝인덱스]
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del a[2:8:2] # 인덱스 2부터 2씩 증가시키면서 인덱스 6까지 삭제
>>> a
[0, 10, 30, 50, 70, 80, 90]
방법은 리스트와 동일하나, 슬라이스에 요소 할당, 삭제만 불가