TIL 16 | Python, 시퀀스 자료형 활용

ryan·2020년 8월 1일
0

Python

목록 보기
5/18

요소가 한 개 들어있는 튜플 만들기

튜플 = (값, )
튜플 = 값,
-> 함수(클래스)를 사용하다 보면 값이 아닌 튜플을 넣어야 할 경우가 생기는데, 이때 값은 한 개지만 튜플을 넣어야 할 때 (값, )과 같은 형식을 사용해야 한다.

>>> (38, )
(38,)

>>> 38,
(38,)

시퀀스 자료형 활용

시퀀스 자료형(sequence types): 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형

시퀀스 자료형의 공통 기능

시퀀스 자료형의 가장 큰 특징은 공통된 동작과 기능을 제공한다는 점이다.
시퀀스 객체: 시퀀스 자료형으로 만든 객체
element: 시퀀스 객체에 들어있는 각 값

특정 값이 있는지 확인

  • 값 in 시퀀스객체
a = [1, 2, 3, 4, 5]
3 in a
True

1000 in a
False
  • 값 not in 시퀀스객체
a = [3, 6, 9, 12, 15, 18]
21 not in a
True

3 not in a
False

튜플, range, 문자열도 같은 방법으로 활용 가능

33 in (11, 22, 44, 55, 66)
False

1 in range(20)
True

'W' in 'Hello, World!'
True

시퀀스 객체 연결

시퀀스객체1 + 시퀀스객체2

a = [1, 2, 3]
b = [6, 7, 8]

a + b
[1, 2, 3, 6, 7, 8]

시퀀스 자료형 중에서 range는 + 연산자로 객체를 연결할 수 없다, But!
range를 리스트 또는 튜플로 만들어서 연결하면 된다.

range(0, 5) + range(10, 30)
TypeError: unsupported operand type(s) for +: 'range' and 'range'

list(range(0, 5)) + list(range(10, 30))
[0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

문자열은 + 연산자로 여러 문자열을 연결할 수 있음

'Hello, ' + 'everyone!'
'Hello, everyone!'

문자열에 숫자를 연결하려면 숫자를 문자열로 변환해야한다.

  • str(정수), str(실수)
'hello, ' + 10
TypeError: Can't convert 'int' object to str implicitly 

'hello, ' + str(10)
'Hello, 10'

시퀀스 객체 반복

  • 시퀀스객체 * 정수
  • 정수 * 시퀀스객체
[1, 2, 3] * 5
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

range는 + 연산자로 객체를 연결할 수 없었듯이, range는 * 연산자를 사용하여 반복할 수 없다.
따라서 위와 같이 list나 tuple로 만들어서 반복해야한다.

typle(range(0, 10, 3)) * 3
(0, 3, 6, 9, 0, 3, 6, 9, 0, 3, 6, 9)

문자열은 * 연산자를 사용하여 반복할 수 있다.

'Love you! ' * 3
'Love you! Love you! Love you! '

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

리스트, 튜플의 요소 개수 구하기

len(시퀀스객체)

a = [0, 1, 2, 3, 4, 5]		# 리스트
len(a)
6

b = (2, 29, 1, 3, 56, 34, 1234)		# 튜플
len(b)
7

c = range(0, 20, 2)
len(c)
10

실무에서 요소의 개수를 구하는 len 함수를 자주 활용하게 된다.

문자열의 길이 구하기

문자열의 길이는 공백까지 포함한다. 단, 문자열을 묶은 따옴표는 제외(따옴표 안에 포함된 작은따옴표, 큰따옴표는 포함됨)

greeting = 'Hello, how are you?'
len(greeting)
19

인덱스 사용하기

시퀀스 객체의 각 요소는 순서가 정해져 있는데, 이 순서를 index(인덱스, 색인)라고 부른다.
시퀀스 객체의 인덱스는 항상 0부터 시작한다!

  • 시퀀스객체[인덱스]
a = [1, 2, 3, 4, 5]		# 리스트에 인덱스 지정
a[0]
1

b = (1, 2, 3, 4, 5]		# 튜플에 인덱스 지정
b[4]
5

c = range(0, 10, 2)		# range에 인덱스 지정
r[2]
4

greeting = 'Hello, how are you?'		# 문자열에 인덱스 지정
greeting[4]
'o'

음수 인덱스 지정하기

a = [123, 545, 33, 54, 666]		# 리스트의 뒤에서 첫 번째(인덱스 -1) 요소 출력
a[-1]
666

a[-3]		# 리스트이 뒤에서 세 번째(인덱스 -3) 요소 출력
33

b = (1, 2, 3, 4, 5)		# 튜플
b[-1]
5

c = range(0, 101, 2)		# range
r[-5]
92

greeting = 'Dear, my love. I miss the moment that we were in Jeju island together.'		# 문자열
greeting[-9]
't'

인덱스의 범위를 벗어나면 에러가 생긴다.

마지막 요소에 접근하는 방법

시퀀스객체[len(시퀀스객체) - 1]

  • 시퀀스 객체의 마지막 인덱스를 구할 때 종종 사용한다.
a = [1, 2, 3, 4, 5]		# len(a) -> 5
a[len(a) - 1]		# a[4] -> 5
5

요소에 값을 할당하는 방법

시퀀스객체[인덱스] = 값

a = [1, 1, 1, 1, 1]
a[0] = 10
a[1] = 20
a[2] = 30
a[3] = 40
a[4] = 50

a
[10, 20, 30, 40, 50]

a[1]
20

튜플, range, 문자열은 안에 저장된 요소를 변경할 수 없다.

del로 요소 삭제하기

  • del 시퀀스객체[인덱스]
a = [1, 2, 3, 4, 5]
del a[3]
a
[1, 2, 3, 5]

튜플, range, 문자열은 안에 저장된 요소를 삭제할 수 없다.

슬라이스 사용하기

슬라이스(slice)는 무엇인가의 일부를 잘라낸다는 뜻, 시퀀스 슬라이스도 말 그대로 시퀀스 객체의 일부를 잘라낸다.

  • 시퀀스객체[시작인덱스:끝인덱스]
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[0:5]
[0, 1, 2, 3, 4]

끝 인덱스는 가려오려는 범위에 포함되지 않는다. 그래서 끝 인덱스를 가져오려면 가져오려는 인덱스보다 1을 더 크게 지정해야 한다.

리스트의 중간 부분 가져오기

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[3:6]
[3, 4, 5]

a[3:-1]		# 음수를 인덱스로 지정할 수 있다.
[3, 4, 5, 6, 7, 8]

인덱스 증가폭 사용하기

  • 시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[1:7:2]
[1, 3, 5]

인덱스 생략하기

  • 시퀀스객체[:끝인덱스] -> 리스트 처음부터 끝 인덱스까지
  • 시퀀스객체[시작인덱스:] -> 시작 인덱스부터 마지막요소까지
  • a[:] -> 리스트 전체를 가져온다
    인덱스를 생략하는 방법은 시퀀스 객체의 길이를 몰라도 되기 때문에 자주 쓰이는 방식.
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[:6]		# 리스트 처음부터 인덱스 5까지 가져온다.
[0, 1, 2, 3, 4, 5]

인덱스를 생략하면 증가폭 사용하기

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

튜플, range, 문자열도 같은 방식으로 슬라이스를 사용해서 일부를 잘라낼 수 있다.

슬라이스에 요소 할당하기

  • 시퀀스객체[시작인덱스:끝인덱스] = 시퀀스객체
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[1:4] = ['q', 'w', 'e']		# 인덱스 1부터 4까지 할당함.
a
[0, 'q', 'w', 'e', 4, 5, 6, 7, 8, 9]

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]		# 요소 개수를 맞추지 않아도 할당됨. 
a[1:4] = ['q']
[0, 'q', 4, 5, 6, 7, 8, 9]

# 할당할 요소 개수가 많으면 그만큼 리스트이 요소 개수도 늘어남

인덱스 증가폭을 지정해서 인덱스를 건너뛰면서 할당할 수 있다. 인덱스 증가폭을 지정했을 때는 슬라이스 범위의 요소 개수와 할당할 요소 개수가 정확히 일치해야한다.

  • 시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭] = 시퀀스객체
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a[2:8:2] = ['a', 'b', 'c']
a
[0, 1, 'a', 3, 'b', 5, 'c', 7, 8, 9]

튜플, range, 문자열은 슬라이스 범위를 지정하더라도 요소를 할당할 수 없다.

del로 슬라이스 삭제하기

  • del 시퀀스객체[시작인덱스:끝인덱스]
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del a[1:4]
a
[0, 4, 5, 6, 7, 8, 9]

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
del a[2:8:2]
[0, 1, 3, 5, 7, 8, 9]

튜플, range, 문자열은 del로 슬라이스를 삭제할 수 없다.

profile
👨🏻‍💻☕️ 🎹🎵 🐰🎶 🛫📷

0개의 댓글