반응형

시퀀스 자료형이란?


시퀀스 자료형은 순서를 가지고 나열되어 있는 객체를 의미한다.


예를 들어 c언어에서 배열, java에서 string같은 것들은 시퀀스 자료형이라 할 수 있다.


파이썬도 마찬가지로 이러한 것들이 시퀀스 자료형이라고 정의하고 있다.



이때 파이썬의 모든 시퀀스 자료형은 다음과 같은 특성을 가지고 있다.


시퀀스 자료형의 특성


1. 인덱싱 :: 인덱스를 통해 해당 값에 접근이 가능하다. 이때 인덱스는 0부터 시작한다.

2. 슬라이싱 :: 특정 구간의 값을 얻을 수 있다. 이때 구간을 [x:y]라 하면 x <= 값 < y로 정의된다.

3. 연결 :: 두 시퀀스를 연결하여 새로운 시퀀스 자료를 생성하고, '+' 연산자를 이용하여 연결을 할 수 있다.

4. 반복 :: 시퀀스 자료를 여러번 반복 하여 새로운 자료를 생성한다. 이때 '*' 연산자를 이용하여 반복을 할 수 있다.

5. 크기 :: len()을 이용하여 스퀀스 자료의 크기를 알 수 있다.






1. 연결





1
2
3
4
5
6
7
8
9
10
11
12
#시퀸스 자료형 :: 인덱싱
array = [1,2,3,[4,5,6],7,8,9]
string = "Hello Crocus"
 
print("array[3] :: ", array[3])
print("array[3][-2] :: ", array[3][-2])
 
print("string[6] :: ", string[6])
print("string[-11] :: " ,string[11])
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



인덱싱에서 새로운 방식이 등장하였다.


C에서는 할 수 없는 방식인 리스트 속에 또 리스트가 들어갈 수 있고

C에서는 0보다 크거나 같은 인덱스에 대해서 참조가 가능하지만, 파이썬에서는 인덱싱이 음수도 된다는 것이다.


위의 예제를 보자


array[3]은 당연히 C에서 구현불가능한 방식이다. 하지만 파이썬에서는 [4,5,6]임을 알려주고 있다.


두번째로 string[-11]을 보자.


음수 인덱싱은 위의 표에 나타나있듯이, -0이라는 개념은 없기에 -1부터 가장 뒷 값부터 시작한다.


따라서 -11은 'e'를 의미하고있고, e를 출력해준다.






2. 슬라이싱


[x:y] :: x이상 y미만에 대해 슬라이싱 한다.

[:y] :: 처음부터 y미만에 대해 슬라이싱 한다.

[x:] :: x부터 자료의 끝까지 슬라이싱 한다.

[:-y] ::  처음부터 -y에 해당하는 인덱스 바로 직전까지 슬라이싱 한다.(아래 예제 참조)

[-m:] :: -m부터 자료의 끝까지 슬라이싱 한다.


슬라이싱에서 조심해야 할 부분이 하나 있다.


[시작:끝]을 기술할 때


시작 <= x <임을 꼭 기억하자.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
#시퀸스 자료형 :: 슬라이싱
array = [1,2,3,[4,5,6,7,8,9,10],7,8,9]
string = "Hello Crocus"
 
print("array[1:] :: ", array[1:])
print("array[1::+2]", array[1::2]) # array[시작:끝:증가율]
print("array[2:5] :: ", array[2:5]) # 항상 조심해야 한다. 2<= x < 5의 범위이다.
print("array[3][3:-2] :: ", array[3][3:-2])
 
print("string[6:] :: ", string[6:])
print("string[:-7] :: ", string[:-7])
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


슬라이싱이라는 개념도 다른 언어에서 찾아보기 어려웠던 방식이다.


for(int i = x ; i < y ; i++) array[i] 를 array[x:y]로 표현해주고 있고

for(int i = x; i < y ; i += 2)를 array[x:y:2]로 표현해주고 있다.


슬라이싱에서도 음수 인덱스를 이용 할 수 있는데 다음 과정을 보자

array[3][3:-2] :: array[3]은 [4,5,6,7,8,9,10]이다. 여기서 [3:-2]는 7,8을 의미하게 된다.


왜 7,8,9가 아니냐면 -2인덱스 값 바로 전까지를 포함하고 있기 때문이다.


 







3. 연결


연결은 자료형이 동일한 두 시퀀스 대상에 대해 할 수 있는 방법이다.


예를들어 문자열 + 리스트는 불가능하지만


리스트 + 리스트, 문자열 + 문자열은 가능하다는 것이다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#시퀸스 자료형 :: 연결
string1 = "Hello Crocus "
string2 = "http://www.crocus.co.kr"
 
tuple1 = (1,2,3)
tuple2 = (4,5,6,7)
 
string1 += string2
print(string1)
 
tuple2 += tuple1
print(tuple2)
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus






4. 반복


연결은 자료형이 동일한 두 시퀀스 대상에 대해 할 수 있는 방법이다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#시퀸스 자료형 :: 반복
import sys
 
string1 = 'Hello '
string2 = "Crocus "
 
= int(sys.stdin.readline())
 
if n >= 3:
    print("string1을 n번 반복!! :: ",string1*n)
else:
    print("n이 3보다 작은 것 같네요?")
 
string1 = "반복"
string2 = "안녕"
list = [1,2,3]
 
ans = [list, string1*2, string2] # string1이 *2가 되어 들어가있다
 
print("ans에는 어떻게 들어가 있을까? ", ans)
print("안녕 반복 :: ", ans[2]*3)
#list[0]는 int, string1[0]는 string이기에 연결이 되지 않는다.
#따라서 list[0]을 string으로 변환해주고 연결해본다.
print("list[0]와 string1[0]를 연결 :: ", list[0].__str__() + string1[0])
 
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



반복에 대한 예제들을 위에 담아두었다.


그리고 input을 하는 방법도 위에 import sys를 하고 sys.stdin.readline()를 통해 할 수 있음을 표시해두었다.


ans 리스트를 보면 [리스트, 스트링1, 스트링2]으로 들어가있는데 스트링1이 *2를 하니 2번 반복하여 들어가 있음을 알 수 있다.


그리고 ans[2]*3을 통해 반복을 할 수 있음을 알 수 있고


가장 아래에는 반복과 관련된 내용은 아니지만, ans에 존재하는 타입이 다른 것들끼리도 연결 할 수 있음을 보여주고 있다.





5. 크기


이 특성이 시퀀스에서 공통된 특성인 이유는 모든 시퀀스는 가변적이지 않고 고정된 크기, 길이를 가지고 있기 때문이다.


따라서 우리는 시퀀스의 크기를 공통적으로 구할 수 있다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
#시퀸스 자료형 :: 크기
 
string1 = "반복"
string2 = "안녕"
list = [1,2,3]
 
ans = [list, string1*2, string2] # string1이 *2가 되어 들어가있다
 
print("len(list) :: "len(list)) # 1,2,3
print("len(ans) :: "len(ans)) # ans 속에 다양한 시퀀스들이 있어도 ans 자체는 3
print("len(string2*2) :: "len(string2*2)) # 안녕이 2번된 길이 총 4를 가진다
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus







반응형