[python] 시퀀스 자료형 사용하기

시퀀스 자료형의 공통 기능 사용하기

파이썬에서는 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형을 시퀀스 자료형
아직 배우지 않았지만 bytes, bytearray도 있다.
시퀀스 자료형으로 만든 객체를 시퀀스 객체, 각 값을 요소

특정 값이 있는지 확인, 다른 시퀀스 자료형에도 똑같이 적용된다.

a = list(range(0, 100, 10))
print(30 in a)
print(100 in a)
print(30 not in a)
print(100 not in a)

시퀀스 객체 연결, range 외의 시퀀스 자료형에는 똑같이 적용, range는 불가하다.

a = list(range(0, 40, 10))
b = [9, 8, 7, 6]
c = a + b
print(c)
s = 'abc' + str(1)  # 문자열에 숫자도 연결 가능
print(s)

시퀀스 객체 반복, * n 하면 n번 반복

print([0, 10, 20, 30] * 3)

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

시퀀스 객체의 길이를 구할 때는 len을 이용한다.

a = [1, 2, 3, 4, 5]
print(len(a))

b = (1, 2, 3)
print(len(b))

print(len(range(0, 10, 2)))

print(len('Hello, world!'))

인덱스 사용하기

-길이 ~ 0 ~ 길이 - 1 으로 인덱싱할 수 있다.
범위를 벗어난 인덱싱을 하면 IndexError가 나온다.

a = [1, 2, 3, 4, 5]
print(a[0])  # 첫번째 요소
print(a[-1])  # 마지막 요소

b = (1, 2, 3)
print(b[1])  # 앞에서 두번째 요소
print(b[-2])  # 뒤에서 두번째 요소

r = range(0, 10, 2)
print(r[2])  # range의 앞에서 세번째 숫자

s = 'Hello'
print(s[3])  # 문자열의 앞에서 네번째 문자

# 시퀀스 객체에 인덱스를 지정하지 않으면 시퀀스 객체 전체를 뜻한다.
print(a, b, r, s)

리스트를 제외한 튜플, range, 문자열은 읽기 전용 자료형이므로 지정된 요소를 변경할 수도, 삭제할 수도 없다.

a[2] = 10  # 리스트 a 의 앞에서 세번째 요소를 10으로 변경
print(a)

del a[2]  # 리스트 a 의 앞에서 세번째 요소를 삭제
print(a)

슬라이스 사용하기

리스트[l:r] 하면 인덱스 l ~ r - 1의 요소를 가져온다.
리스트[l:r:w] 하면 인덱스 l ~ r - 1의 요소를 w 간격으로 가져온다.

a = list(range(0, 100, 10))
print(a[0:4])  # 0 ~ 3 의 요소를 가져온다.
print(a[4:-1])  # 4 ~ -2 의 요소를 가져온다
print(a[2:8:3])  # 2 ~ 7의 요소를 3의 간격으로 가져온다

리스트[:r] 하면 처음부터 r - 1 까지 가져온다
리스트[l:] 하면 l부터 끝까지 가져온다.
리스트[:] 하면 전체를 가져온다.
리스트[:r:w] 하면 처음부터 r - 1 까지 w간격으로 가져온다.
리스트[l::w] 하면 l부터 끝까지 w간격으로 가져온다.
리스트[::w] 하면 처음부터 끝까지 w간격으로 가져온다.

print(a[::-1])  # 리스트를 거꾸로 출력

튜플, range, 문자열에도 동일하게 적용
slice 객체를 사용해 시퀀스 객체를 잘라낼 수도 있다.

print(range(10)[slice(4, 7, 2)])
s = slice(4, 7, 2)
print(range(10)[s])

슬라이스에 요소 할당을 할 수도 있는데, 값을 적어주지 않은 곳의 요소는 사라진다.
튜플, range, 문자열은 당연히 불가능
원래 있던 리스트가 변경되는 것이고, 새 리스트는 생성되지 않는다.

a[2:5] = ['a', 'b']
print(a)

인덱스 증가폭을 지정했을 때에는 슬라이스 범위의 요소 개수와 할당할 요소 개수가 일치해야 한다.

a[0:len(a):2] = ['c', 'c', 'c', 'c', 'c']
print(a)

슬라이스로 요소 삭제를 할 수 있다.
당연히 튜플, range, 문자열은 불가능

del a[2:5]
print(a)

del a[:len(a):2]
print(a)

Updated:

Leave a comment