시퀀스 자료형이란?
시퀀스 자료형은 순서를 가지고 나열되어 있는 객체를 의미한다.
예를 들어 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 " n = 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 |
'Basic > Python' 카테고리의 다른 글
파이썬 함수 호출 방법 (0) | 2017.05.01 |
---|---|
파이썬 문자열(string) 및 멤버 체크(in) 이해 (0) | 2017.05.01 |
파이썬 다양한 연산자 이용 방법(사칙, 관계, 논리, 비트) (0) | 2017.04.28 |
파이썬 반복문 for, for else, while 이용 방법 (2) | 2017.04.28 |
파이썬 조건문 if, else, elif 이용 방법 (0) | 2017.04.28 |