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

1 minute read

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

# 파이썬에서는 리스트, 튜플, 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)

Categories:

Updated:

Leave a comment