[Python] 시퀀스 자료형 2탄 (list, tuple)
- 개발자라면?/Python
- 2022. 10. 26.
시퀀스 자료형
시퀀스 자료형(sequence types) 란 요소들(elements)이 연속적(sequence)으로 이어진 자료형을 의미해요.
파이썬에서는 list, tuple, range, str 을 주로 사용하고, bytes, bytearray 도 시퀀스 자료형입니다.
이전글(링크)에 이어 "시퀀스 자료형"에 대해 알아볼까요?
리스트 (list)
리스트란?
리스트는 변수 여러개를 묶는 역할을 하는 자료형이에요.
서로 다른 자료형들을 하나의 리스트로 저장할 수도 있어요. (리스트 안에 리스트를 저장할 수도 있어요.)
리스트는 아래 방법으로 선언해요.
list1 = [ 'element1', 'element2', 'element3', ... ] list2 = [1, 2, 3, "hello", ['a', 'b', 'c']]
빈 리스트를 생성하는 것도 가능해요.a= [] b= list()
리스트 연산하기
리스트를 연산하는 방법은 문자열 연산과 동일해요.
단, +연산자를 사용할 때는 주의할 점이 있어요. "같은 type 만 연결"해야한다는 점인데요.
리스트는 여러 type의 요소를 저장할 수 있어서 헷갈릴 수 있어요. (아래 예시 참고)
리스트 연산의 예시를 살펴볼게요.
>>> c= [1, 2, 3, "hello", ['a', 'b', 'c']] >>> d=[4,5,6] # 더하기 >>> c+d [1, 2, 3, 'hello', ['a', 'b', 'c'], 4, 5, 6] # 반복하기 >>> c*2 [1, 2, 3, 'hello', ['a', 'b', 'c'], 1, 2, 3, 'hello', ['a', 'b', 'c']] # 길이구하기 >>> len(c) 5 # 연산 오류!!! - int 와 str 은 + 로 직접 연산 불가 >>> c[2] + " hi" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' # 정답 >>> str(c[2]) + " hi" '3 hi'
인덱싱 & 슬라이싱
리스트도 시퀀스 자료형이기 때문에 인덱싱과 슬라이싱이 가능해요.
앞서 살펴 본 문자열과 동일한 규칙으로 할 수 있어요.
* 슬라이싱 규칙 - list[시작:끝:간격]
인덱싱과 슬라이싱의 예를 살펴보죠.
>>> a= [] >>> b= list() >>> c= [1, 2, 3, "hello", ['a', 'b', 'c']] # 인덱싱 >>> c [1, 2, 3, 'hello', ['a', 'b', 'c']] >>> c[0] 1 >>> c[0]+c[2] 4 >>> c[-1] ['a', 'b', 'c'] # 슬라이싱 >>> c[0:2] [1, 2] >>> c[2:4] [3, 'hello'] >>> c[4:] [['a', 'b', 'c']] >>> c[3:] ['hello', ['a', 'b', 'c']]
리스트는 "리스트를 포함할 수 있다."는 특징이 있어요.
그렇다면 리스트안의 리스트를 인덱싱하고 슬라이싱할 수 있을까요?
당연히 가능해요.
# 인덱싱 >>> c[-1][0] 'a' >>> c[-1][1] 'b' >>> c[-1][-1] 'c' #슬라이싱 >>> c[4][:2] ['a', 'b']
위의 예시를 살펴볼게요.
"c" 라는 list 안에는 5번째 요소(index = 4 or -1)로 ['a', 'b', 'c'] 라는 list 가 있죠.
이 list 에 해당하는 인덱스를 이용해 요소를 선택해줘요. ( c[-1] or c[4] )
그 후 인덱싱과 슬라이싱의 방법을 적용하면 끝!! ( c[4][0] or c[-1][:2] )
리스트 수정, 삭제
리스트는 문자열이나 튜플과 다르게 요소를 수정하거나 삭제할 수 있어요.
* 이전 글에서 살펴 본 것처럼 문자열은 출력만 수정되고 원본은 변하지 않았죠.
방법은 간단해요.
수정은 index 로, 삭제는 del 함수로!!
예시로 알아보죠.
>>> c [1, 2, 3, 'hello', ['a', 'b', 'c']] # 값 수정하기 >>> c[2] = 10 >>> c [1, 2, 10, 'hello', ['a', 'b', 'c']] # 삭제하기 >>> del c[1] >>> c [1, 10, 'hello', ['a', 'b', 'c']] # 한번에 여러 요소 삭제 - 시작은 포함 // 끝은 미포함 >>> d=[4,5,6,7,8,9,0] >>> del d[1:4] >>> d [4, 8, 9, 0] >>> del c[1:] >>> c [1]
리스트 관련 함수들
이번에는 리스트 관련 함수들을 소개할게요.
문자열과 마찬가지로 리스트에서 사용할 수 있는 내장함수들이 있어요.
사용 방법은 예시를 보면 쉽게 이해될 거에요.
# .append() - 요소 추가 (맨 끝에 위치) >>> d=[4, 8, 9, 0] >>> d.append([10,11]) >>> d [4, 8, 9, 0, [10, 11]] # .insert() - 요소 삽입 (위치 지정) >>> d.insert(1, 23) >>> d [0, 23, 4, 8, 9, [10, 11]] # .remove() - 요소 제거 (중복된 요소는 앞의 요소 부터 제거) >>> d.remove(23) # 인덱스가 아닌 요소를 지정 >>> d [0, 4, 8, 9, [10, 11]] # pop() - 요소 끄집어 내기 (출력 후 제거) >>> d.pop(2) # 인덱스를 지정한다 8 >>> d [0, 4, 9, [10, 11], 4] >>> d.pop() # 인덱스가 없을 경우 끝 요소를 끄집어 낸다 4 >>> d [0, 4, 9, [10, 11]] # .sort() - 리스트 정렬 (숫자, 알파벳(대문자 우선)) >>> e=[3,5,2,6,8,0] >>> e.sort() >>> e [0, 2, 3, 5, 6, 8] >>> f=['a', 'c', 'B', 'b'] >>> f.sort() >>> f ['B', 'a', 'b', 'c'] #위치 반환 >>> f.index('a') 1 # .count() - 특정 요소의 수 세기 >>> d.append(4) >>> d.append(4) >>> d.append(4) >>> d.append(4) >>> d.append(4) >>> d [0, 4, 9, [10, 11], 4, 4, 4, 4, 4] >>> d.count(4) 6 # .extend() - 리스트 확장 >>> a=[1,2,3] >>> b=[4,5] >>> a.extend([6,7]) # 한번에 여러 요소 추가하기 >>> a [1, 2, 3, 6, 7] >>> a.extend(b) # 다른 리스트의 요소들을 요소로 추가하기 >>> a [1, 2, 3, 6, 7, 4, 5]
튜플(tuple)
튜플이란?
튜플은 "셀 수 있는 수량의 순서있는 열거" 라는 의미를 가지고 있어요.
튜플은 몇 가지를 제외하면 리스트와 거의 비슷해요.
우선 튜플의 선언부터 알아보죠.
>>> t1 = () >>> t2 = (1,) >>> t3 = (1, 2, 'a', 'b') >>> t1 () >>> t2 (1,) >>> t3 (1, 2, 'a', 'b')
튜플과 리스트
그럼 다른 점을 알아볼까요?
- 튜플은 ( ) 를 이용해서 정의한다. ( 리스트는 [ ] )
- 튜플은 요소를 삭제, 수정, 추가할 수 없다. ( 리스트는 삭제, 수정, 추가 할 수 있다. )
튜플의 요소를 리스트처럼 다루면 오류가 발생해요.
요소 삭제
>>> del t3[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object doesn't support item deletion
요소 수정
>>> t3[0] = 'c' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment
요소 추가
>>> t.append((4)) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'append' >>> t.insert(1, 3) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'insert'
튜플 다루기
앞서 언급한 것처럼 튜플은 변경, 삭제가 안돼요.
그렇다면 튜플을 어떻게 활용할 수 있을까요?
튜플도 시퀀스 자료형이죠!! 그래서 인덱싱, 슬라이싱, 연산 등을 할 수 있어요.
예시를 볼게요.
# 인덱싱 >>> t3 (1, 2, 'a', 'b') >>> t3[0] 1 >>> t3[3] 'b' # 슬라이싱 >>> t3[1::2] (2, 'b') # 더하기 >>> t2 (1,) >>> t3 (1, 2, 'a', 'b') >>> t2+t3 (1, 1, 2, 'a', 'b') # 반복하기 >>> t3*2 (1, 2, 'a', 'b', 1, 2, 'a', 'b') # 길이 구하기 >>> len(t3) 4 >>> len(t3*3) 12
여기까지 이전글(링크)에 이어 "시퀀스 자료형"에 대해 알아봤어요.
글이 도움이 되셨다면 공감 버튼 눌러주세요. 😊
'개발자라면? > Python' 카테고리의 다른 글
[Python] 모듈, 패키지, 라이브러리 구분하기 (0) | 2022.10.26 |
---|---|
[Python] 시퀀스 자료형 1탄 (str, list) (0) | 2022.10.25 |