본문 바로가기

💻 Python/🔎기초 Python

2. 시퀀스 데이터 타입 (List, Tuple, range)

2. 시퀀스 데이터 타입

  • 시퀀스(Sequence)는 연속된 이라는 뜻!
  • 시퀀스 데이터타입은 순서가 있으며 인덱싱이 가능하다.
  • list, tuple, range가 있다.
    • list(대괄호[], 수정 가능)
    • tupel(소괄호(), 수정 불가능 immutable),
    • range(수정 불가능)

(1) 리스트[List]

  • 다른 값(or 여러값들을 덩어리로 묶는데 사용되는 데이터 타입
  • 대괄호로 묶어준다. 수정이 가능하다.
squares = [1,4,9,16]
print(squares)
print(type(squares))

a = list(range(1,10,2))
print(a)
[1, 4, 9, 16]
<class 'list'>
[1, 3, 5, 7, 9]
#리스트 합치기 : 리스트끼리는 +기호(연산자)를 통해 하나의 리스트로 합칠 수 있다. 
a = [1,2,3]
b = [4,5,6]
print(a+b)

#리스트의 길이는 내장함수 len()을 사용해서 구할 수 있다. 
print(len(a))
[1, 2, 3, 4, 5, 6]
3

인덱싱과 슬라이싱

  • 인덱싱이란 무언가를 가르킨다는 의미
    • index는 0부터 시작한다.
    • 인덱싱 : squares[0]과 같은 형태로 특정 index값에 접근 가능, -부호는 리스트의 맨 마지막 요소부터 순서
  • 슬라이싱은 무언가를 잘라낸다라는 의미 (일부분 뜯어낸다)
    • squares[2:4]와 같이 슬라이싱(부분 선택) 가능
    • :를 기준으로 앞의 index는 포함, 뒤의 index는 포함하지 않는다.
#인덱싱 
squares = [1,4,9,16,25]
print(squares[0])
print(squares[1])
print(squares[2])
print(squares[3])
print(squares[4])
print(squares[-1])
print(squares[-2])
print(squares[-3])
print(squares[-4])
print(squares[-5])
1
4
9
16
25
25
16
9
4
1
#리스트의 요소로 리스트가 올 수도 있다.
#리스트 안의 리스트의 경우 리스트 안의 리스트를 인덱싱하여 값에 접근할 수 있다. 
a = [1,2,3,[4,5]]
print(a[3])
print(a[3][0])
print(a[3][1])
[4, 5]
4
5
#슬라이싱
squares = [1,4,9,16,25]
print(squares[:3]) #0에서2까지 출력 1,4,9
print(squares[3:]) #3에서4까지 출력 16,25
print(squares[-1:])#맨뒤출력 25
print(squares[-4:])#뒤에서 4번째부터 맨뒤까지 출력 4,9,16,25
[1, 4, 9]
[16, 25]
[25]
[4, 9, 16, 25]

리스트는 변경 가능한 타입(mutable type)이므로 수정이 가능 (튜플과 차이점)

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

#수정 가능
a[2] = "박수"
print(a)

#삭제 가능
del a[2]
print(a)
[1, 2, '박수', 4, 5]
[1, 2, 4, 5]

(2) 튜플(Tuple)

  • 리스트와 매우 유사하지만, 소괄호로 묶어주고 수정이 불가능하다.
squares = (1,4,9,16,25)
print(squares)
print(type(squares))

a = tuple(range(1,10,2))
print(a)
(1, 4, 9, 16, 25)
<class 'tuple'>
(1, 3, 5, 7, 9)
#튜플 합치기 : 튜플끼리는 +기호(연산자)를 통해 하나의 튜플로 합칠 수 있다. 
a = (1,2,3)
b = (4,5,6)
print(a+b)

#튜플의 길이는 내장함수 len()을 사용해서 구할 수 있다. 
print(len(a))
(1, 2, 3, 4, 5, 6)
3

인덱싱과 슬라이싱

※인덱싱, 슬라이싱 기호는 대괄호로 리스트와 동일

  • 인덱싱이란 무언가를 가르킨다는 의미
    • index는 0부터 시작한다.
    • 인덱싱 : squares[0]과 같은 형태로 특정 index값에 접근 가능, -부호는 튜플의 맨 마지막 요소부터 순서
  • 슬라이싱은 무언가를 잘라낸다라는 의미 (일부분 뜯어낸다)
    • squares[2:4]와 같이 슬라이싱(부분 선택) 가능
    • :를 기준으로 앞의 index는 포함, 뒤의 index는 포함하지 않는다.
#인덱싱 
squares = (1,4,9,16,25)
print(squares[0])
print(squares[1])
print(squares[2])
print(squares[3])
print(squares[4])
print(squares[-1])
print(squares[-2])
print(squares[-3])
print(squares[-4])
print(squares[-5])
1
4
9
16
25
25
16
9
4
1
#튜플의 요소로 튜플이 올 수도 있다.
#튜플 안의 튜플의 경우 튜플안의 튜플을 인덱싱하여 값에 접근할 수 있다. 
a = (1,2,3,(4,5))
print(a[3])
print(a[3][0])
print(a[3][1])
(4, 5)
4
5
#슬라이싱
squares = (1,4,9,16,25)
print(squares[:3]) #0에서2까지 출력 1,4,9
print(squares[3:]) #3에서4까지 출력 16,25
print(squares[-1:])#맨뒤출력 25
print(squares[-4:])#뒤에서 4번째부터 맨뒤까지 출력 4,9,16,25
(1, 4, 9)
(16, 25)
(25,)
(4, 9, 16, 25)

튜플은 변경 불가능한 타입(immutable type)이므로 수정이 불가능 (리스트와 차이점)

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

#수정 불가능
a(2) = "박수"
print(a)

#삭제 불가능
del a(2)
print(a)

리스트안에 튜플이 있고, 튜플안에 리스트가 있다면?

#리스트[]안에 튜플()이 있는 경우
a = [1,2,3,(4,5)]

#리스트는 수정가능
a[2] = "박수"
print(a)

a[3] = "와우"
print(a)

#튜플은 수정불가능
#실행하면 에러발생
#a[3][0] = "와"
#print(a)
<class 'list'>
<class 'int'>
<class 'tuple'>
<class 'int'>
[1, 2, '박수', (4, 5)]
[1, 2, '박수', '와우']
#튜플()안에 리스트[]가 있는 경우
a = (1,2,3,[4,5])

#리스트는 수정가능
a[3][0] = "와"
print(a)

a[3][1] = "우"
print(a)

#튜플은 수정불가능
#실행하면 에러 발생
#a[3] = "와우"
#print(a)
(1, 2, 3, ['와', 5])
(1, 2, 3, ['와', '우'])

(3) 레인지(range)

  • 연속적인 숫자를 나타내는 타입이며 수정 불가능(immutable)하다!
  • 시퀀스 데이터 타입이기 때문에 len()을 이용한 길이 확인과 인덱싱, 슬라이싱은 가능하다!
  • 보통 For loop문에서 자주사용된다.
r = range(0,10) #0에서 9까지 10개 
print(type(r))
print(r)
<class 'range'>
range(0, 10)
#인덱싱 가능
print(r[0])
print(r[9])
0
9
#슬라이싱 가능
print(r[:3])
print(r[3:])
print(r[:-1])
print(r[-1:])
range(0, 3)
range(3, 10)
range(0, 9)
range(9, 10)
#len()길이 확인 가능
len(r)
10

레인지는 변경 불가능한 타입(immutable type)이므로 수정이 불가능 (튜플처럼)

#실행하면 에러 발생
#print(r[0])
#r[0] = 3
#print(r[0])