11. 시퀀스(연속적) 자료형 활용하기

코래블러·2020년 11월 2일
0
post-thumbnail

파이썬에서는 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형을 시퀀스 자료형(sequence types)라고 부릅니다.

시퀀스 자료형의 특징: 공통 동작과 기능을 제공
시퀀스 객체: 시퀀스 자료형으로 만든 객체
요소(element): 시퀀스 객체에 들어있는 각 값

11.1 특정 값이 있는지 확인하기![]

형식
값 in 시퀀스객체

입력 a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
입력 30 in a
True
입력 100 in a
False

값 not in 시퀀스객체
입력 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'
True

11.1.2 시퀀스 객체 연결하기

시퀀스 객체끼리는 + 를 이용해 서로 연결하여 새 객체를 만들 수 있다

시퀀스객체1 + 시퀀스객체2
입력 a = [0, 10, 20, 30]
입력 b = [9, 8, 7, 6]
입력 a + b
[0, 10, 20, 30, 9, 8, 7, 6]

근데 굳이 변수를 써서 안 이어도 되고, 리스트 여러 개를 직접 연결해도 상관없다

BUT 시퀀스 자료형중에서 range는 +연산자로 객체 연결 불가능
range 끼리 이어붙이기 위해서는, list or tuple 안에다가 range를 집어넣고 연결하면 됨

11.1.3 시퀀스 객체 반복하기

형식:
시퀀스객체 정수 --------------------> 정수 자리에 음수나 0을 넣으면 빈 객체가 되고, 실수는 곱이 안됨(에러남!)
정수
시퀀스객체

입력 [0, 10, 20, 30] * 3
[0, 10, 20, 30, 0, 10, 20, 30, 0, 10, 20, 30]

11.2 시퀀스 객체의 요소 개수 구하기

시퀀스 객체 안에는 여러 요소가 있고, 이 요소의 개수(길이)를 구할 때는 len(length) 함수를 사용

형식:
len(시퀀스객체)

list 객체나 range 객체나 둘다 len() 안에 집어넣으면 요소의 개수가 나온다

range도 마찬가지다
입력 len(range(0, 10, 2))
5
range()를 쓰면 개수가 눈으로 명확하게 들어오지 않기 때문에, range 개수 셀 때 은근 쓴다.

문자열도 똑같음
입력 len('Hello, World!)
13

공백도 카운트함

11.3 인덱스 사입력

인덱스: 시퀀스 객체의 각 요소는 순서가 정해져 있으며, 이 순서를 인덱스라고 부른다
**시퀀스 객체의 인덱스는 항상 0부터 시작한다는 점을 기억하자!

형식:
시퀀스객체[인덱스]

이건 옛날에 C++에서 하던 거랑 같음

음수 인덱스 지정하기

입력 a = [38, 21, 53, 62, 19]
입력 a[-1] # 리스트의 뒤에서 첫 번째(인덱스 -1) 요소 출력
19
입력 a[-5] # 리스트의 뒤에서 다섯 번째(인덱스 -5) 요소 출력
38

이건 튜플, range, 문자열 다 똑같음

마지막 요소에 접근하기

인덱스를 -1로 지정하기
입력a[-1]
or
len으로 시퀀스 객체 길이 구한다음
a[객체길이-1]해주면 나옴
따라서
입력a[len(a)-1] 해주면 마지막 객체 나옴

요소에 값 할당하기

a=[0,0,0,0,0] 이라고 할때

a[0]=9 라고 하면, a[0] 자리에 9가 할당됨

근데 튜플,range,문자열 들은 요소에 값 할당하는 게 안됨
그냥 읽기 전용

del로 요소 삭제하기

입력 a = [38, 21, 53, 62, 19]
입력 del a[2]
입력 a
[38, 21, 62, 19]

하지만 값 할당할때와 마찬가지로 튜플,range문자열은 읽기 전용이라 값을 건드릴수 없음

11.4 슬라이스 사용하기

형식: 시퀀스객체[시작인덱스:끝인덱스]

입력 a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
입력 a[0:4] # 인덱스 0부터 3까지 잘라서 새 리스트를 만듦
[0, 10, 20, 30]

중간 부분 가져오기

입력a=[4:7]
a=[40,50,60]

입력 a=[4:-1] -------------------> 리스트의 마지막 부분은 인덱스가 -1 인걸 이용해도 된다!
a=[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[7:] # 인덱스 7부터 마지막 요소까지 가져옴
[70, 80, 90]

시퀀스객체[:끝인덱스]

입력 a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
입력 a[:7] # 리스트 처음부터 인덱스 6까지 가져옴
[0, 10, 20, 30, 40, 50, 60]

시퀀스객체[:]

입력 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] # 리스트의 처음부터 인덱스를 2씩 증가시키면서 인덱스 6까지 가져옴
[0, 20, 40, 60]

시퀀스객체[시작인덱스::증가폭]

입력 a[7::2] # 인덱스 7부터 2씩 증가시키면서 리스트의 마지막 요소까지 가져옴
[70, 90]

시퀀스객체[::증가폭]

a[::2] # 리스트 전체에서 인덱스 0부터 2씩 증가시키면서 요소를 가져옴
[0, 20, 40, 60, 80]

시퀀스객체[::]

a[::] # 리스트 전체를 가져옴
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

**슬라이스를 사용할 때 인덱스 증가폭을 음수로 지정하면 요소를 뒤에서부터 가져올 수 있습니다. 다음은 리스트 a에서 인덱스 5부터 2까지 1씩 감소시키면서 요소를 가져옵니다.

입력 a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
입력 a[5:1:-1][50, 40, 30, 20]

즉, 슬라이스를 할때 증가폭이 음수로 지정이 되어있으면, 읽는 방향이 <-- 인 것이다.
그래서 a[5:1:-1] 일때 카운팅이 a[5],a[4],a[3],a[2] 으로 되는 거임
원래 슬라이스 할때, 끝 인덱스는 카운팅을 하지 않는 게, 뒤에서부터 셀 때는 이런 식으로 구현이 되는 것

튜플, 문자열, range 다 구현은 똑같이 함

11.4.7 슬라이스에 요소 할당하기

시퀀스객체[시작인덱스:끝인덱스] = 시퀀스객체

입력 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로 슬라이스 삭제하기

del 시퀀스객체[시작인덱스:끝인덱스]

입력 a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
입력 del a[2:5] # 인덱스 2부터 4까지 요소를 삭제
입력 a
[0, 10, 50, 60, 70, 80, 90]

덱스 2부터 2씩 증가시키면서 인덱스 6까지 삭제합니다.
입력 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]

profile
언제나 한 발짝만 더...!

0개의 댓글