티스토리 뷰

📌 시퀀스 자료형 (sequence type)

[리스트], (튜플), {딕셔너리}, 문자열, range는 데이터가 연속적이라는 공통점이 있다. 파이썬에서는 이처럼 연속적으로 이어진 데이터를 묶는 자료형을 시퀀스 자료형(sequence types)이라고 부른다.

 

📍  시퀀스 자료형은 공통된 동작과 기능을 제공한다.

📍  시퀀스 자료형으로 만든 객체를 시퀀스 객체라고 부르며, 객체 안에 저장된 값을 요소라고 부른다.

📍  앞서 다루었던 리스트, 튜플, 딕셔너리와 겹치는 내용이 있을 수 있다.

 


👉  검색 : 특정 값이 있는 지 확인하기

1.  값 in 시퀀스객체

num = [ 10, 20, 'hi', 4, 5 ]
if(10 in num) :
	print('10 in num')
else :
	print('10 not in num')

✔  위와 같이 in 연산자를 사용하면, 시퀀스 객체에 값이 존재하는 경우 True를 반환하고 없다면 False를 반환한다.

✔  반대로 in 앞에 not을 붙여 사용하면 특정 값이 없는 지를 확인한다.

dic = { 'one':1 , 'two':2 , 'three':3 }

if( 1 not in dic.values() ) :
    print('1 not in dic')
else :
    print('1 in dic')

✔  다른 시퀀스 객체와는 달리 {딕셔너리}는 kye-value 한 쌍을 요소로 가진다.

✔. values() 메서드를 사용해 value만 따로 리스트로 뽑아낸 다음에 in 연산을 해주자.

✔  key값을 확인하고 싶다면. keys() 메서드를 사용하고 in 연산을 하자.

 

👉  결합 : 시퀀스 객체의 연결

1. 덧셈 연산자를 사용한 결합

num1 = [ 10, 20 ]
num2 = [ 30, 40 ]
num3 = ( 50, 60 )

#서로 다른 시퀀스는 연산 불가
#num = num1+num3

n1 = num1 + num2
n2 = num1 + list(num3)

print(n1)
print(n2)

✔  같은 시퀀스 자료형인 경우만 덧셈 연산이 가능하며, 서로 다른 시퀀스 자료형을 결합하려면 형변환이 필요하다

# 에러 발생
# test = range(5) + range(5,10)
# print(test)

# 형변환 후 덧셈 연산자 사용할 것
num = list(range(5)) + list(range(5,10))
print(num)

✔  시퀀스 자료형 중 range는 덧셈 연산자로 객체를 연결할 수 없다.

✔  range에 덧셈 연산을 통해서 다른 객체를 연결하고 싶다면 다른 시퀀스 자료형으로 형변환해서 결합하자.

 

👉  반복 : 시퀀스 객체의 반복

 

1.  *을 사용한 반복

print(list(range(1,3))*2)		#range는 list나 tuple로 형변환 후 반복 가능
print('123'*2)				#string
print([1,2,3]*2)			#list
print((1,2,3)*2)			#tuple

dic = {1:'one',2:'two',3:'three'}	#dictionary도 반복을 위해서는
print(list(dic.keys())*2)		#key만 뽑아서 list나 tuple로 형변환 하거나
print(list(dic.values())*2)		#value만 뽑아서 형변환해서 반복할 수 있다.
print(dic[1]*2)				#대괄호[key]를 사용해서 value를 반복할 수있다.

✔  리스트, 튜플, 문자열은 * 을 사용해서 반복할 수 있다.

✔  딕셔너리는 key나 value 중 하나를 뽑아내고, 리스트나 튜플로 형변환해야 반복할 수 있다.

✔  range도 마찬가지로 반복을 위해서는 형변환이 필요하다.

 

👉  길이 : 시퀀스 객체의 요소 개수 구하기

1.  리스트, 튜플, 딕셔너리의 길이 구하기

list = [1,2,3,4,5]
tuple = ('one','two','three')
dic = {1:'one',2:'two',3:'three'}

print(len(list))
print(len(tuple))
print(len(dic))

2.  range가 생성한 숫자 개수 구하기

number = range(1,20,4)
print(len(number))
# 1 5 9 13 17

3.  문자열 길이 구하기

hello = '안녕하세요'

print(len(hello))
print(len(hello.encode('utf-8')))

✔  문자열의 길이는 공백을 포함한다.

✔  len은 파이썬 3 에서는 문자의 개수를 구해주지만, 파이썬 2.7에서는 실제 바이트 수를 구한다.

✔  인코딩 방법에 따라서 문자 하나가 가지는 크기가(byte) 다르다.

✔. encode('인코딩 방법') 메서드를 통해 확인할 수 있다.

 

👉 접근 : 시퀀스 자료형의 요소 사용하기

1.  시퀀스 객체 [인덱스]

l = [1,2,3,'hi']
t = (10,20,30,40,50)
d = {'one':1, 2:'two', 3:'three'}
r = range(5)
s = 'hello world'

print(l[0])
print(t[0])
print(d['one'])
print(r[0])
print(s[0])

✔  딕셔너리는 요소로 key-value를 가지므로, 대괄호 안에 idx가 아니라 key값을 넣어주자.

l = [1,2,3,'hi',5,6,'hello']
print(l[-1])
print(l[-5:-2])

✔  인덱스를 음수로 지정하면, 뒤에서부터 요소에 접근한다.


2.  시퀀스 객체.__getitem__(인덱스)

l = [1,2,3,'hi']
t = (10,20,30,40,50)
d = {'one':1, 2:'two', 3:'three'}
r = range(5)
s = 'hello world'

print(l.__getitem__(0))
print(t.__getitem__(0))
print(d.__getitem__('one'))
print(r.__getitem__(0))
print(s.__getitem__(0))

✔  대괄호를 사용해서 요소를 가져오는 건 실제로는 __getitem__ 메서드를 호출하는 것과 같다.

✔  따라서 직접 메서드를 사용해서 요소를 가져올 수 있다. 대괄호를 사용했을 때와 결과가 동일함을 확인할 수 있다.

✔  __getitem__ 메서드의 인수로는 idx를 전달하고, 딕셔너리는 key값을 전달한다.

 

 

 

 

 

[참고] 엘리스 트랙-혼자 공부하는 파이썬 / 길벗-파이썬 코딩 도장 / 엘리스 트랙 - 예제 중심의 파이썬 입문 / 위키백과

댓글
«   2024/12   »
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
29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday