[python] 연속적으로 이어진 시퀀스 자료형

anjiyoo·2024년 3월 6일

Python

목록 보기
7/41
post-thumbnail

1.시퀀스 자료형

  • 값이 연속적으로 이어진 자료형 (리스트, 튜플, range, 문자열 등)
  • 공통 동작과 기능 제공
값 in 시퀀스객체          # 시퀀스 객체에 특정 값이 있는지 확인
값 not in 시퀀스객체      # 시퀀스 객체에 특정 값이 없는지 확인
 
시퀀스객체1 + 시퀀스객체2    # 시퀀스 객체를 서로 연결하여 새 시퀀스 객체를 만듦
시퀀스객체 * 정수          # 시퀀스 객체를 특정 획수만큼 반복하여 새 시퀀스 객체를 만듦
정수 * 시퀀스객체          # 시퀀스 객체를 특정 횟수만큼 반복하여 새 시퀀스 객체를 만듦

len(시퀀스객체)           # 시퀀스 객체의 요소 개수(길이) 구하기

시퀀스객체[인덱스]          # 시퀀스 객체의 요소에 접근
시퀀스객체[0]             # 시퀀스 객체의 인덱스는 0부터 시작하므로 첫 번째 요소 
시퀀스객체[-음수]          # 인덱스를 음수로 지저어하면 뒤에서부터 요소에 접근, -1은 뒤에서 첫 번째 요소
시퀀스객체[인덱스] = 값     # 시퀀스 객체의 요소에 값 저장

del 시퀀스객체[인덱스]      # 시퀀스 객체의 요소를 삭제

1-1.시퀀스 자료형 특정 값이 있는지 확인

값 in 시퀀스객체
값 not in 시퀀스객체
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
print(30 in a) # true 출력

a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
print(100 not in a) # true 출력

1-2.시퀀스 객체 연결

  • range는 + 연산자로 객체를 연결할 수 없음 (range를 리스트 또는 튜플로 만들어서 연결)
  • str은 + 연산자로 연결 가능
  • 문자열에 정수를 연결하려고 하면 에러 발생 (str을 사용하여 숫자를 문자열로 변환)
시퀀스객체1 + 시퀀스객체2
a = [0, 10, 20, 30]
b = [9, 8, 7, 6]
print(a + b) # [0, 10, 20, 30, 9, 8, 7, 6] 출력

1-3.시퀀스 객체 반복

  • range는 * 연산자로 객체를 반복할 수 없음 (range를 리스트 또는 튜플로 만들어서 연결)
  • str은 * 연산자로 연결 가능
시퀀스객체 * 정수
정수 * 시퀀스 객체

1-4.시퀀스 객체의 요소 개수 구하기

  • len() 함수 사용
len(시퀀스객체)
# 리스트와 튜플의 요소 개수 구하기
a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
print(len(a)) #10 출력

# range의 숫자 생성 개수 구하기
print(len(range(0, 10, 2)) #5 출력

# 문자열 길이 구하기_문자열의 길이는 공백까지 포함
hello = 'Hello, world!'
print(len(hello) #13 출력

2.인덱스 사용

  • 시퀀스 객체의 각 요소의 순서
  • 시퀀스 객체에 [ ] 를 붙이고 [ ] 안에 각 요소의 인덱스를 지정하면 해당 요소에 접근 가능
  • 시퀀스 객체인 인덱스는 항상 0부터 시작
  • 시퀀스 객체에 인덱스를 지정하지 않은 상태는 해당 객체 전체를 뜻함
시퀀스객체[인덱스]
a = [38, 21, 53, 62, 19]
print(a[0]) # 리스트의 첫 번째(인덱스 0) 요소 출력

a = (38, 21, 53, 62, 19)
print(a(0)) # 튜플의 첫 번쨰(인덱스 0) 요소 출력

r = range(0, 10, 2)
print(r[2]) # range의 세 번쨰(인덱스 2) 요소 출력

hello = 'Hello, world!'
print(hello[7]) # 'w' 출력

a = [38, 21, 53, 62, 19]
print(a) # 시퀀스 객체에 인덱스를 지정하지 않으면 시퀀스 객체 전체를 뜻함

2-1.getitem 메서드

  • 시퀀스 객체에서 [ ] 를 사용하면 실제로는 __getitem__ 메서드를 호출하여 요소를 가져옴
시퀀스객체.__getitem__(인덱스)
a = [38, 21, 53, 62, 19]
a.__getitem__(1) # 21 출력

2-2.음수 인덱스 지정하기

# 음수 인덱스 지정
a = [38, 21, 53, 62, 18]
print(a[-1]) # 리스트의 뒤에서 첫 번쨰(인덱스 -1) 요소 출력

# 튜플 음수 인덱스
b = (38, 21, 53, 62, 18)
print(b[-1]) # 튜플의 뒤에서 첫 번째(인덱스 -1) 요소 출력

# range 음수 인덱스
r = range(0, 10, 2)
print(r[-3]) # range의 뒤에서 세 번째(인덱스 -3) 요소 출력

# 문자열 음수 인덱스
hello = 'Hello, world!'
print(hello[-4]) # 문자열의 뒤에서 네 번쨰(인덱스 -4) 요소 출력

2-3.인덱스 범위가 벗어날 경우

  • 인덱스 범위가 벗어날 경우 에러 발생
  • 마지막 요소의 인덱스는 시퀀스 객체의 요소 개수보다 1보다 작아야 함

2-4.마지막 요소에 접근 하기

  • len() 함수로 리스트의 길이를 구한 뒤 길이를 인덱스로 지정할 경우 에러 발생
  • 리스트 길이의 -1 뺀 값이 마지막 요소

3.요소에 값 할당하기

  • 범위를 벗어난 인덱스에 값을 할당하면 에러 발생
  • 튜플, range, str 객체는 값 할당이 불가 (읽기 전용)
시퀀스객체[인덱스] = 값
a = [0, 0, 0, 0, 0]
a[0] = 38
a[1] = 21
a[2] = 53
a[3] = 62
a[4] = 19
print(a) = [38, 21, 53, 62, 19]

3-1.del로 요소 삭제 하기

  • 리스트와 달리 튜플은 요소를 삭제할 수 없음
  • 튜플, range, str 객체는 값 삭제 불가 (읽기 전용)
del 시퀀스객체[인덱스]
a = [38, 21, 53, 62, 19]
del a[2]
print(a) # [38, 21, 62, 19] 출력

4.슬라이스 사용

  • 시퀀스 객체의 일부를 잘라냄
  • 슬라이스를 했을 때 실제로 가져오는 요소는 시작 인덱스부터 끝 인덱스 -1까지
시퀀스객체[시작인덱스:끝인덱스]                       # 지정된 범위의 요소를 잘라서 새 시퀀스 생성
시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]             # 인덱스 증가폭을 지정하면 해당 값만큼 인덱스를 증가시키면서 요소를 가져옴
시퀀스객체[:끝인덱스]                              # 시작 인덱스 생략, 객체의 처음부터 끝 인덱스-1까지 가져옴
시퀀스객체[시작인덱스:]                             # 끝 인덱스 생략, 시작 인덱스부터 마지막 요소까지 가져옴 
시퀀스객체[:]                                    # 시작 인덱스와 끝 인덱스를 생략, 객체 전체를 가져옴

시퀀스객체[0:len(시퀀스객체)]                       # len을 응용하여 객체 전체를 가져옴
시퀀스객체[:len(시퀀스객체)]                        # 시작 인덱스 생략, len을 응용하여 객체 전체를 가져옴 

시퀀스객체[:끝인덱스:증가폭]                         # 객체의 처음부터 증가폭만큼 인덱스를 증가시키면서 끝 인덱스-1까지 가져옴

시퀀스객체[시작인덱스::증가폭]                        # 시작 인덱스부터 증가폭만큼 인덱스를 증가시키면서 마지막 요소까지 가져옴

시퀀스객체[::증가폭]                               # 객체 전체에서 증가폭만큼 인덱스를 증가시키면서 요소를 가져옴

시퀀스객체[::]                                   # 객체 전체를 가져옴, 시퀀스객체[:]와 같음

시퀀스객체[시작인덱스:끝인덱스] = 시퀀스객체             # 범위를 지정하여 여러 요소에 값 할당
시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭] = 시퀀스객체   # 증가폭만큼 인덱스를 건너뛰면서 할당

del 시퀀스객체[시작인덱스:끝인덱스]                   # 특정 범위의 요소를 삭제 (원본 객체 변경)

4-1.인덱스 증가폭 사용

  • 슬라이스는 인덱스의 증가폭을 지정해 범위 내에서 인덱스를 건너뛰며 요소를 가져올 수 있음
시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]

4-2.인덱스 생략하기

  • 시퀀스 객체의 길이를 몰라도 돼서 자주 사용
  • 주로 시퀀스 객체의 마지막 일부분만 출력할 때 사용
시퀀스객체[:끝인덱스]
시퀀스객체[시작인덱스:]
시퀀스객체[:]

4-3.인덱스를 생략하면서 증가폭 사용하기

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

4-4.len 응용하기

a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[0:len(a)] # 시작 인덱스에 0. 끝 인덱스에 len(a) 지정하여 리스트 전체를 가져옴

a[:len(a)] # 시작 인덱스 생략, 끝 인덱스에 len(a) 지정하여 리스트 전체를 가져옴

4-5.튜플, range, 문자열에 슬라이스 사용하기

튜플[시작인덱스:끝인덱스]
튜플[시작인덱스:끝인덱스:인덱스증가폭]
  • range는 리스트, 튜플과 달리 요소가 모두 표시되지 않고 생성 범위만 표시됨 (객체로 만들려면 list에 넣기)
range객체[시작인덱스:끝인덱스]
range객체[시작인덱스:끝인덱스:인덱스증가폭]
  • 문자열은 문자 단위로 잘라서 새 문자열을 만듦
문자열[시작인덱스:끝인덱스]
문자열[시작인덱스:끝인덱스:인덱스증가폭]

5.slice 객체 사용

  • 시퀀스 객체(시퀀스 자료형으로 만든 변수)를 잘라냄
슬라이스객체 = slice(끝인덱스)
슬라이스객체 = slice(시작인덱스, 끝인덱스)
슬라이스객체 = slice(시작인덱스, 끝인덱스, 인덱스증가폭)
시퀀스객체[슬라이스객체]
시퀀스객체.__getitem__(슬라이스객체)

5-1.슬라이스에 요소 할당하기

  • 시퀀스 객체는 슬라이스로 범위를 지정해 여러 요소에 값을 할당
  • 인덱스 증가폭을 지정했을 때는 슬라이스 범위의 요소 개수와 할당할 요소 개수가 일치해야함
  • 튜플, range, str은 값 할당 지원하지 않음
시퀀스객체[시작인덱스:끝인덱스] = 시퀀스객체
시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭] = 시퀀스 객체

5-2.del로 슬라이스 삭제하기

  • 인덱스 증가폭을 지정하면 인덱스를 건너뛰면서 삭제
del 시퀀스객체[시작인덱스:끝인덱스]
profile
기록으로 흔적을 남기는 것을 좋아합니다

0개의 댓글