🔥알림🔥
① 테디노트 유튜브 -
구경하러 가기!
② LangChain 한국어 튜토리얼
바로가기 👀
③ 랭체인 노트 무료 전자책(wikidocs)
바로가기 🙌
④ RAG 비법노트 LangChain 강의오픈
바로가기 🙌
⑤ 서울대 PyTorch 딥러닝 강의
바로가기 🙌
#02-파이썬(Python) 리스트(list)와 튜플(tuple)
본 포스팅은 파이썬(Python) 코딩 입문자를 위한 튜토리얼 시리즈 연재 중 일부입니다. 이번 튜토리얼에서는 파이썬 리스트(list)와 튜플(tuple)을 다룹니다.
코드
<img src="/images/2020-09-24/colab_logo_32px.png" alt="Colab으로 열기" style="margin-right: 0.5rem;"align="left"/> Colab으로 열기
시퀀스, 집합형 자료구조
분류 | 타입 | 특징 | 예시 |
---|---|---|---|
시퀀스(sequence) | 리스트(list) | 순서가 있고, 가변(mutable) | [1, 2, 3] |
시퀀스(sequence) | 튜플(tuple) | 순서가 있고, 불변(immutable) | (1, 2, 3) |
세트(set) | 세트(set) | 순서가 없고, 중복을 허용하지 않음 | {1, 2, 3} |
맵(map) | 딕셔너리(dictionary) | 순서가 없고, key/value 쌍으로 이루어짐 | {'a': 1, 'b': 2, 'c': 3} |
리스트(list)
- 리스트는 데이터의 요소를 순차적으로 파악하는데 용이한 자료형 입니다.
- 리스트는 다양한 메서드(method) 혹은 함수를 지원하며 메서드를 활용하여 요소를 추가, 삭제 및 변경할 수 있습니다.
메서드(method): 객체(object)가 포함하는 함수 혹은 기능입니다. 함수에 대한 내용은 추후에 다룹니다.
생성
[] 형태로 표현합니다.
빈 리스트를 생성합니다.
mylist = []
mylist
[]
mylist = list()
mylist
[]
리스트를 생성하면서 값을 포함합니다.
mylist = [1, 3, 2, 4, 5]
mylist
[1, 3, 2, 4, 5]
list 규칙
- list는 다양한 type의 데이터를 집합으로 가집니다.
- list안에 list도 허용합니다.
- list는 순서(order)의 개념이 존재합니다.
a = []
a = [1, 2, 3]
a
[1, 2, 3]
a = [1, 'hello', 3, 3.14, True]
a
[1, 'hello', 3, 3.14, True]
리스트 안에 리스트로 포함할 수 있습니다.
a = [1, 'hello', 3, 3.14, [6, 7, '8']]
a
[1, 'hello', 3, 3.14, [6, 7, '8']]
관련 함수
- . 점 연산자로 함수를 실행할 수 있습니다.
- 함수는 어떤 작업을 수행하는 코드를 모아 이름을 붙인 것입니다.
- 자세한 내용은 추후 함수 단원에서 배웁니다.
append() : 값 추가
빈 리스트를 생성합니다.
mylist = []
mylist
[]
append() 는 값을 맨 뒤에 추가 합니다.
mylist.append(1)
mylist
[1]
중복된 값을 추가할 수 있으며, 순서가 유지됩니다.
mylist.append(7)
mylist.append(7)
mylist.append(7)
mylist.append(3)
mylist.append(5)
mylist.append(2)
mylist
[1, 7, 7, 7, 3, 5, 2]
sort() : 정렬
- 요소를 순서대로 정렬합니다 (오름차순)
- sort()는 내부적으로 정렬 합니다.
mylist = [1, 6, 3, 2, 7, 5, 4]
mylist.sort()
mylist
[1, 2, 3, 4, 5, 6, 7]
역정렬(reverse order)도 가능합니다. (reverse=True
를 지정합니다.)
mylist = [1, 6, 3, 2, 7, 5, 4]
mylist.sort(reverse=True)
mylist
[7, 6, 5, 4, 3, 2, 1]
sorted() : 정렬
- 요소를 순서대로 정렬합니다.
- 내부적으로 정렬하지 않고 정렬된 복사본을 반환합니다.
- 즉 원본 데이터는 정렬되지 않습니다.
mylist = [1, 6, 3, 2, 7, 5, 4]
sorted(mylist)
[1, 2, 3, 4, 5, 6, 7]
mylist
[1, 6, 3, 2, 7, 5, 4]
마찬가지로, reverse=True
를 지정하여 역정렬할 수 있습니다.
mylist = [1, 6, 3, 2, 7, 5, 4]
sorted(mylist, reverse=True)
[7, 6, 5, 4, 3, 2, 1]
reverse() : 역정렬
mylist.reverse()
mylist
[4, 5, 7, 2, 3, 6, 1]
len() : 전체 항목의 개수 세기
mylist = [1, 6, 3, 2, 7, 5, 4]
len(mylist)
7
insert() : 값 추가
지정한 index에 값 추가
mylist.insert(1, 100)
mylist
[1, 100, 6, 3, 2, 7, 5, 4]
remove() : 값 제거
리스트에서 첫 번째 나오는 해당 값 삭제
mylist.remove(7)
mylist
[1, 100, 6, 3, 2, 5, 4]
pop() : 요소 꺼내기
x번째 요소를 돌려주고 해당 요소는 삭제
mylist.pop(1)
100
del : 요소 삭제
mylist = [100, 200, 300, 400, 500]
del mylist[1]
print(mylist)
del mylist[3]
print(mylist)
[100, 300, 400, 500] [100, 300, 400]
count() : 갯수 세기
a = [1, 1, 1, 1, 1, 2, 2, 3]
a.count(1)
5
a.count(2)
2
a.count(5)
0
extend() : 리스트 확장
a = [1, 2, 3]
a.extend([4, 5])
a
[1, 2, 3, 4, 5]
+
연산자는 extend()와 동일한 기능을 수행합니다.
a = [1, 2, 3]
a + [4, 5]
[1, 2, 3, 4, 5]
인덱싱(indexing): 색인
mylist = [1, 2, 3, 4]
인덱스는 0번 부터 시작 합니다.
mylist[0]
1
mylist[3]
4
mylist[4]
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-46-88b11041aa4f> in <module> ----> 1 mylist[4] IndexError: list index out of range
역순 인덱싱
파이썬은 음수 인덱싱을 지원합니다.
mylist[-1]
4
mylist[-3]
2
mylist[-5]
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-49-7f152f66d2d3> in <module> ----> 1 mylist[-5] IndexError: list index out of range
인덱스로 접근하여 값 바꾸기
mylist = [1, 2, 3, 4, 5]
mylist
[1, 2, 3, 4, 5]
mylist[0]
1
mylist[0] = 100
mylist
[100, 2, 3, 4, 5]
mylist[-1] = 300
mylist
[100, 2, 3, 4, 300]
중첩된 리스트 인덱싱
중첩된 리스트에 대한 리스트는 중첩 인덱싱으로 접근합니다. 값을 변경하는 것도 가능합니다.
mylist = [['가', '나', '다'], [4, 5, 6], 7, 8, 9]
mylist
[['가', '나', '다'], [4, 5, 6], 7, 8, 9]
1 번째 리스트 요소를 가져옵니다.
mylist[1]
[4, 5, 6]
1번째 리스트의 요소 중 1번째 요소를 가져오기 위해서는 중첩 인덱싱으로 접근합니다.
mylist[1][1]
5
mylist[1][1] = 99
mylist
[['가', '나', '다'], [4, 99, 6], 7, 8, 9]
슬라이싱(Slicing): 범위 추출
- 슬라이싱의 활용: [start:stop:step] 을 명시하여 부분을 추출할 수 있습니다.
mylist = [100, 200, 300, 400, 500]
[:]을 활용하여 전체를 추출할 수 있습니다.
mylist[:]
[100, 200, 300, 400, 500]
[start:]는 시작 index 부터 끝까지 추출합니다.
mylist[2:]
[300, 400, 500]
mylist[-3:]
[300, 400, 500]
[:end]는 처음부터 end 전까지 추출합니다.
mylist[:3]
[100, 200, 300]
[start:end]는 start부터 end 전까지 추출합니다.
mylist[1:3]
[200, 300]
mylist[-3: -1]
[300, 400]
indexing 에 step 활용하기
list[start:stop:step]
- step은 몇 칸씩 건너 뛰는지 지정합니다.
mylist = [100, 200, 300, 400, 500]
2칸씩 건너뛰기
mylist[::2]
[100, 300, 500]
역순 출력
mylist[::-1]
[500, 400, 300, 200, 100]
역순 그리고 2칸씩 건너뛰기
mylist[::-2]
[500, 300, 100]
list 덧셈: list 확장
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
a + b
[1, 2, 3, 4, 5, 6, 7, 8]
a = ['a', 'b', 'c']
b = ['d', 'e', 'f']
a + b
['a', 'b', 'c', 'd', 'e', 'f']
list 곱셈: list 반복
a = ['a', 'b', 'c']
b = [1, 2, 3, 4]
a * 2
['a', 'b', 'c', 'a', 'b', 'c']
b * 3
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
튜플(tuple)
- 리스트(list)는 가변(mutable)하는 객체(object)이지만, 튜플(tuple)은 불변(immutable)한 객체입니다.
- 가변 객체는 요소에 대한 수정, 삭제, 변경 등이 가능하지만, 불편 객체는 요소에 대한 수정, 삭제, 변경이 불가합니다.
생성
- tuple(), () 로 생성합니다.
- 혹은 , 로 생성할 수 있습니다.
()로 튜플을 생성할 수 있습니다.
mytuple = (1, 2, 3)
mytuple
(1, 2, 3)
tuple() 로 생성하는 경우
mytuple = tuple([1, 2, 3])
mytuple
(1, 2, 3)
, 로 생성할 수 있습니다.
mytuple = 1, 2, 3
mytuple
(1, 2, 3)
단일 요소를 생성할 때는 반드시 ,를 붙여 줍니다.
- (1,)과 (1)은 다른 자료구조임을 꼭 알고 있어야 합니다.
mytuple = 1,
print(type(mytuple))
mytuple
<class 'tuple'>
(1,)
mytuple = (1,)
print(type(mytuple))
mytuple
<class 'tuple'>
(1,)
mytuple = (1)
print(type(mytuple))
mytuple
<class 'int'>
1
튜플 언패킹(unpacking)
- 튜플로 한 번에 여러 변수에 값을 한 번에 할당할 수 있습니다.
a, b, c = 1, 2, 3
print(a)
print(b)
print(c)
1 2 3
튜플 자료형은 요소의 추가, 삭제, 변경등을 허용하지 않습니다.
mytuple = (1, 2, 3)
mytuple
(1, 2, 3)
요소를 조회하는 것은 가능합니다.
mytuple[1]
2
요소를 변경하려는 경우
mytuple[1] = 100
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-106-302beb1444a7> in <module> ----> 1 mytuple[1] = 100 TypeError: 'tuple' object does not support item assignment
요소를 삭제하려는 경우
del mytuple[1]
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-107-011fbf932d04> in <module> ----> 1 del mytuple[1] TypeError: 'tuple' object doesn't support item deletion
튜플 덧셈: 튜플의 확장
a = (1, 2)
b = (3, 4)
a + b
(1, 2, 3, 4)
튜플 곱셈: 튜플의 반복
a * 3
(1, 2, 1, 2, 1, 2)
길이 파악하기
mytuple
(1, 2, 3)
len(mytuple)
3
list를 tuple로 변환
a = [1, 2, 3, 4]
a
[1, 2, 3, 4]
type(a)
list
b = tuple(a)
b
(1, 2, 3, 4)
type(b)
tuple
tuple을 list로 변환
a = (1, 2, 3, 4)
a
(1, 2, 3, 4)
type(a)
tuple
b = list(a)
b
[1, 2, 3, 4]
type(b)
list
리스트로 type을 변경하였기 때문에 요소의 추가 및 삭제가 가능합니다.
b.append(5)
b
[1, 2, 3, 4, 5]
b.remove(2)
b
[1, 3, 4, 5]
요소를 추가 및 삭제한 후 다시 tuple로 변경할 수 있습니다.
c = tuple(b)
c
(1, 3, 4, 5)
type(c)
tuple
댓글남기기