컴퓨터 프로그래밍 - 언어 공부/Python 프로그래밍

6. 파이썬의 시퀀스 자료형 (기초)

waitam1nute 2024. 7. 30. 18:19

파이썬에는 시퀀스 자료형이라는 것이 있다.

시퀀스의 의미는 값이 연속적으로 이어져있다는 것인데, 우리함께 하나씩 알아가보자.

 

 

문자열

 

다른 언어와 다르게, 파이썬에서의 문자열은 꿈과 희망이 가득하다.

문자열은 큰따옴표나 작은따옴표로 묶여있는 뭉탱이를 의미한다.

"Hello World" , "23224" 이처럼 아예 숫자로만 이루어져있어도 따옴표 안에 있다면 문자열이다.

 

<여러줄을 문자열로 만들기>

x라는 변수에 장문을 집어넣어 보자.

x = '''

지금부터 발표를

시작하겠습니다.

저는 2학년 1반의

000입니다.

'''

이렇게 하면 x에 줄바꿈이 적용되어있는 장문이 들어가게 된다.

 

<문자열 슬라이싱>

문자열에서 필요한 부분만 딱 슬라이스해서 도려낼 수 있다.

대괄호와 인덱스만 있으면 되는데, 주민등록번호로 예를 들어보자.

a = "040705-3123456"

이렇게 있다고 가정할 때, 성별을 구하고 싶다라고 하면, 

문자열 중 8번째 값을 가져와야 한다.

근데 파이썬에서는 첫번째 값을 보통 0으로 하므로, 성별을 뜻하는 문자의 인덱스는 7이다.따라서 print(a[7]) 이렇게하면 >> 3이 출력된다.

 

여러개의 값도 출력해보자. 생년월일을 알고 싶다면,

print(a[0:6]) 

이렇게하면 0부터 5까지의 문자가 출력되어, 040705가 출력된다!

이게 슬라이싱이다.

 

range

레인지는 연속된 값을 생성한다.

range(0, 10)

이렇게 하면, 0부터 9까지의 연속된 수를 생성한다. 즉, 0 1 2 3 4 5 6 7 8 9가 생성되겠다. 10은 안만들어 지는 것 주의!

range(10)

이렇게 해도 똑같다. 끝만 입력하면, 0부터 10미만인 정수들을 생성한다고 생각하자.

 

레인지에는 증가폭도 설정할 수 있다.range(시작, 끝, 증가폭) 이렇게 사용하면 되는데, 

range(0, 10, 2)

>>> 0, 2, 4, 6, 8 이렇게 생성된다!

// 증가폭은 음수로 설정하면 점점 낮아지는 내립차순으로 수들이 생성된다는 것 쯤은 기억하자.

 

 

리스트

지금까지 항상 변수에는 한가지의 값만 대입해서 썼다.

이제부터 리스트에는 한가지 리스트에 여러개의 값을 대입할 것이다.

리스트를 선언하는 방법은, 변수 선언과 똑같이 하되, 값은 대괄호 안에 집어넣어주면 된다.

mylist = [1, 2, 3, 4, 5]

// 리스트 안의 요소들은 자료형이 똑같을 필요도 없다. 숫자도 넣고, 문자열도 넣고, 다 섞여있어도 된다!

// 아무값도 넣지 않거나, mylist = list() 이렇게 사용하면 '빈 리스트'를 만들 수 있다. (나중에 값 대입)

 

<레인지를 활용하여 리스트 만들기>

어차피 연속된 값으로 리스트를 만들 것이라면, range를 활용하는 게 좋다.

a = list(range(0, 10)) 

이렇게 하면 0부터 9까지의 숫자가 들어있는 a라는 리스트가 만들어진다.

 

<리스트 연결하기>

a = [1, 2, 3]

b = [4, 5, 6]

a + b하면,

[1, 2, 3, 4, 5, 6] 인 리스트 나온다.

 

<리스트 반복하기>

a = [1, 2, 3]

b = a * 3

b >> [1, 2, 3, 1, 2, 3, 1, 2, 3]

 

<요소 하나 삭제하기>

del을 사용하여 요소 하나를 삭제할 수 있다.

b = [1, 2, 3, 1, 2, 3, 1, 2, 3]

del b[3]

b >> [1, 2, 3, 2, 3, 1, 2, 3]

// 문자열이나 튜플, range에는 쓸 수 없다.

 

<리스트에서 슬라이싱>

리스트에서도 슬라이싱을 사용할 수 있는데, 문자열에서처럼 특정 구간을 뽑아내는 용도로 써도 되지만, 두가지 기능이 중요하다.

할당하기

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

a[2:5] = [1, 2, 3]

>> a = [1, 2, 1, 2, 3, 6, 7, 8, 9]

할당하는 값이 더 많으면, 요소의 개수가 늘어난다.

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

a[2:5] = [1, 2, 3, 4, 5]

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

할당하는 값이 더 적으면, 요소의 개수가 줄어든다.

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

a[2:5] = [1, 2]

>> a = [1, 2, 1, 2, 6, 7, 8, 9]

 

삭제하기

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

del a[2:5]

>> a = [1, 2, 6, 7, 8, 9]

 

▶ 증가값 정하기

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

a[:10:2]

>> [0,2,4,6,8]

 

 

튜플

튜플은 리스트처럼 자료형을 순서대로 저장하지만, 안에 있는 값들 변경, 추가, 삭제할 수 없다.

고정된 값만을 가지는 것에 쓰기 좋겠다.

튜플을 선언하는 방법은 변수 선언과 똑같이 하되, 소괄호 안에 넣어주면 된다.

mytuple = (1, 2, 3, 4, 5)

 

<요소가 한개인 튜플 생성>

a = (1) 

튜플을 이렇게 생성하면, 괄호의 의미를 알아듣지 못해서 그냥 a라는 변수에 1만 들어간다.

따라서,

a = (1 , ) 

이렇게 생성해주어야 요소가 한개인 튜플을 만들 수 있다.

 

<range로 튜플 만들기>

a = tuple(range(0, 10)) 

이렇게 하면 0부터 9까지의 숫자가 들어있는 a라는 튜플 만들어진다.

 

<리스트와 튜플로 변수 선언>

a = (1, 2, 3) 일 때,

q, w, e = a 

이렇게 선언하면 각각 q,w,e에 1,2,3 이 들어간다.

 

// 튜플도 리스트와 마찬가지로, 연결하기, 반복하기가 가능하다.

 

시퀀스 자료형의 공통적 기능

1. in 사용하기

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

10 in a >> true

in은, 시퀀스 객체 안에 특정 값이 있으면 True를, 없으면 False를 반환한다.

 

EX)

a = range(10)

5 in a >> true 

 

a = "Hello"     

'H' in a    >> true

 

2. len 사용하기

a = [0, 1, 2, 3, 4, 5]

len(a) >> 6

 

EX) 

a = (0, 1, 2, 3, 4, 5) 

a = "Helloo"

a = range(6)

>> 셋다 len(a) 의 값은 6

 

3. 요소에 접근하기

a = [0, 1, 2, 3, 4, 5]

a[0] >> 0    a[3] >> 3      인덱스의 '3'은 4번째자리를 뜻함.

// 접근하지않고 a만 쓰면, 전체 요소가 모두 출력된다.

접근해서 값도 바꿀 수 있다.

a[3] = 9

a = [0, 1, 2, 9, 4, 5]

// 튜플은 당연히 값을 변경할 수 없다. range도 이렇겐 못바꾼다.(규칙성이 있는 연속된 수이므로 하나만 못바꿈)

 

 

EX)

a = (0, 1, 2, 3, 4, 5)

a[3] >> 3

a = "Helloo"

a[1] >> 'e'

a = range(6)

a[5] >> 5

 

음수로 인덱스 지정

음수로도 인덱스를 지정할 수 있는데, -1은 가장 마지막 요소, 1씩 작아질 수록 앞으로 온다고 생각하면된다.

a = (0, 1, 2, 3, 4, 5)

a[-2] >> 4

 

4. 슬라이싱

위에서 사용한 슬라이싱을 range, 튜플에서도 사용할 수 있다.

근데 방법도 똑같고, 기능도 똑같아서 기본적인 설명은 생략한다.

 

<slice 객체 사용하기>

s = slice(2, 5)

이렇게 객체를 만들어 놓으면, 여러군데에 써먹을 수 있다.

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

a[s] >> [2, 3, 4]

이렇게 활용 가능하다.