728x90

리스트에 이어서 튜플이 무엇인지 짚어보고 넘어가보자!

 

튜플은 리스트처럼 요소를 일렬로 저장하지만, 안에 저장된 요소를 변경, 추가, 삭제를 할 수 없다.!!

 쉽게 설명하면 값을 읽는 용도로만 사용한다는 것이다. 

 

튜플은 ( )로 묶어주면 튜플이 된다.

>>> a = (2, 4, 6, 8) # 튜플 = (값, 값, 값)
>>> a
(2, 4, 6, 8)

>>> b = 8, 12, 14, 16 # 튜플 = 값, 값, 값
>>> b
(8, 12, 14, 16)

 

튜플에도 range를 사용하여 만들어 줄 수 있다.

>>> H = tuple(range(17)) # 튜플 = tuple(range(횟수))
>>> H
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)

>>> C = tuple(range(1, 6)) # 튜플 = tuple(range(시작, 끝))
>>> C
(5, 6, 7, 8, 9, 10, 11)

>>> T = tuple(range(-1, 5, 2)) # 튜플 = tuple(range(시작, 끝, 증가폭))
>>> T
(-1, 0, 2, 4)

우리는 파이썬에서 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자요형을 시퀀스 자료형이라고 배웠다.

 

쉽게 해석하면,

     리스트: [5, 6, 7, 8, 9]          튜플: (10, 11, 12, 13, 14)       range(5) 과같이 설명할 수 있다.

 

느낌이 올 것이다. 강요는 아니다. 

 

이렇게 시퀀스는 객체로 공통된 동작과 기능을 사용할 수 있다. 

쉽게 설명하면,

팀(시퀀스 객체) 팀원(객체)라고 표현할 수 있다. 

 

시퀀스 객체 안에 특정 값이 있는지 확인해볼 수 있다. 참과 거짓으로 구분해보자!

>>> a = [5, 10, 15, 25, 30, 35, 40] # 값 in 시퀀스객체
>>> 10 in a # 10이 안에 있지?
True # 진실!
>>> 50 in a # 50이 안에 있지?
False # 거짓!

>>> b = [5, 10, 15, 25, 30, 35, 40] # 값 not in 시퀀스객체
>>> 50 not in b # 50이 b 안에 없지?
True # 진실!
>>> 25 not in b # 25가 b 안에 없지?
False # 거짓!

 

시퀀스 객체를 +(연산자)를 사용해서 서로 연결해줄 수 있다. 결과는 새로운 객체를 만들어낸다!

>>> a = [1, 2, 3, 4, 5, 6, 7] 
>>> b = [8, 9, 10, 11, 12, 13, 14]
>>> a + b # 시퀀스객체1 + 시퀀스객체2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

* range는 +(연산자)로 객체를 연결할 수 없다... 하지만 앞에 리스트, 튜플을 사용하면 연결할 수 있다. 기억하자!!


이제 시퀀스객체에 여러 요소가 들어 있을 것이다. 요소에 개수(길이)를 구할 때는 len 함수를 사용한다. 

 

그렇다면, 어디에 어떤 숫자가 위치해 있는지 어떻게 원하는 요소를 불러올지 고민할 것이다.

 

이때 바로 인덱스에 대한 개념이 나온다.

 

인덱스는 순서에 맞게 원하는 요소를 불러올 수 있다. 어렵지 않다. 차근차근 이해하자.

인덱스는 객체에 [ ]대괄호를 붙이고 대괄호 안에 인덱스를 지정하면 되는데,

a[0]을 출력하면 a에 들어있던 리스트에 제일 첫 번째 요소가 출력된다.

a[0]=17, a[1]=18, a[2]=20 등등 이렇게 출력할 수 있다.

 여기서 중요한 점은 0부터 첫 번째 순서로 시작한다는 점이다.

쉽게 기억하면 첫 번째 -1을 하면 인덱스 값이다!!

 

 

그.렇.다.면

인덱스를 음수로 지정한다면?!!!!

이것도 어렵지 않다.

17이라는 요소가 첫 번째인데 어떻게 음수로 지정하겠는가??

바로 정답은. 음수로 지정하면 맨 뒤에서부터 -1으로 시작한다.

a[-1]=23, a[-2]=5, a[-3]=20 등등 이렇게 지정할 수 있다.!! 어렵지 않다.

 

 

리스트로 지정된 요소에 값을 변경할 수 있다?!

 

정답이다. 지정된 요소에 이미 들어있는 값을 변경할 수 있다.

>>> a = [0, 0, 0, 0, 0]    # 0이 5개 들어있는 리스트
>>> a[0] = 38
>>> a[1] = 21
>>> a[2] = 53
>>> a[3] = 62
>>> a[4] = 19
>>> a
[38, 21, 53, 62, 19]
>>> a[0]
38
>>> a[4]
19

 

 

그러면 삭제도 가능할까?

 

할 수 있다!!

>>> a = [38, 21, 53, 62, 19]
>>> del a[2] # del 시퀀스객체[인덱스]
>>> a
[38, 21, 62, 19]

이렇게 하면 요소를 삭제 할 수 있다.

 

하지만 튜플, range는 읽기 전용이기 때문에 변경, 삭제가 불가능 하다!! 정말 중요한 부분이다 기억하자!!

 

 

공부를 하다가 시퀀스 자료형에서 자주 사용하는 슬라이스(slice)를 놓쳤다.

 

슬라이스는 일부를 잘라내어 필요한 객체를 사용하겠다는 기능이다.

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[0:5]     # 인덱스 0부터 4까지 잘라서 새 리스트를 만듦, 시퀀스객치[시작인덱스:끝인덱스]
[0, 10, 20, 30, 40]

>>> b = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> b[4:7]     # 인덱스 4부터 6까지 요소 3개를 가져옴
[40, 50, 60]

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:8:3]    # 인덱스 2부터 3씩 증가시키면서 인덱스 7까지 가져옴
[20, 50]

어렵지 않다. 범위만 이해를 한다면 충분히 쉽게 느껴질 것 이다.

 

 

이번에는 슬라이스를 이용해서 요소에 추가를 해보자!

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:5] = ['a', 'b', 'c']    # 인덱스 2부터 4까지 값 할당
>>> a
[0, 10, 'a', 'b', 'c', 50, 60, 70, 80, 90]

 

삭제도 가능하다!!

삭제를 할 때는 del을 이용해서 삭제를 할 수 있다.

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del a[2:5]    # 인덱스 2부터 4까지 요소를 삭제
>>> a
[0, 10, 50, 60, 70, 80, 90]
728x90

+ Recent posts