728x90
- 리스트 자료형
- 튜플 자료형
- 딕셔너리 자료형
- 집합 자료형
리스트 자료형
- 리스트(list)
- 자료형의 집합을 표현할 수 있는 자료형
- 대괄호([ ])로 감싸고 각 요솟값은 쉼표(,)로 구분
- 형식: 리스트명 = [ 요소1, 요소2, 요소3, … ]
- 숫자와 문자열만으로 프로그래밍을 하기엔 부족한 점이 많음
- 예) 1부터 10까지의 숫자 중 홀수 모음인 집합{1, 3, 5, 7, 9}는 숫자나 문자열로 표현 불가능
- 리스트로 해결 가능!
>>> odd = [1, 3, 5, 7, 9]
- 리스트의 요소 각각은 list[0], list[1], list[2], list[3] 처럼 “인덱스 번호”를 붙여 사용
- EXAMPLE
- 표는 리스트의 메모리 구조를 보여주며, 각 인덱스에 해당하는 리스트의 주소값과 실제 저장된 값, 그리고 그 값이 위치한 메모리 주소를 나타냅니다.
인덱스(index) 리스트(list) 값(value) 주소(address) 0 0x1001 100 0x1001 1 0x1002 300 0x1002 2 0x1003 500 0x1003 3 ... 4 ...
- 자료형의 집합을 표현할 수 있는 자료형
- 리스트의 구조
- 리스트 안에는 어떠한 자료형도 포함 가능
>>> a = [] >>> b = [1, 2, 3] >>> c = ['Life', 'is', 'too', 'short'] >>> d = [1, 2, 'Life', 'is'] >>> e = [1, 2, ['Life', 'is']]
리스트의 인덱싱
- 문자열과 같이 인덱싱 적용 가능
>>> a = [1, 2, 3]
>>> a
[1, 2, 3]
- 요솟값 간의 덧셈
>>> a = [1, 2, 3]
>>> a[0] + a[2] # 1 + 3
4
- 파이썬은 숫자를 0부터 세기 때문에 a이 리스트 a의 첫 번째 요소
>>> a = [1, 2, 3]
>>> a[0]
1
- a[-1]은 리스트 a의 마지막 요솟값
>>> a = [1, 2, 3]
>>> a[-1]
3
- 리스트 내에 리스트가 있는 경우
- a[-1]은 마지막 요솟값인 리스트 ['a', 'b', 'c'] 반환
>>> a = [1, 2, ['a', 'b', 'c']] >>> a[0] 1 >>> a[-1] ['a', 'b', 'c'] >>> a[3] ['a', 'b', 'c']
- 리스트 a에 포함된 [’a’, ‘b’, ‘c’] 리스트에서 ‘a’ 값을 인덱싱을 사용해 반환
- a[-1]로 리스트 [’a’, ‘b’, ‘c’ ]에 접근하고, [0]으로 요소 'a' 값에 접근
>>> a = [1, 2, ['a', 'b', 'c']] >>> a[-1][0] 'a'
리스트의 슬라이싱
- 문자열과 같이 슬라이싱 적용 가능
>>> a = [1, 2, 3, 4, 5]
>>> a[0:2]
[1, 2]
- 슬라이싱에서는 시작 인덱스와 마지막 인덱스 외에도 “마지막 자리에 증가값”을 사용
- 형식: 변수명[시작 인덱스:마지막인덱스:증가값]
>>> a = [1, 2, 3, 4, 5] >>> b = a[:2] # 처음부터 a[1]까지 >>> c = a[2:] # a[2]부터 마지막까지 >>> b [1, 2] >>> c [3, 4, 5]
리스트 연산하기
- 더하기(+)
-
- 기호는 2개의 리스트를 합치는 기능
- 문자열에서 "abc" + "def" = "abcdef"가 되는 것과 같은 의미
>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a + b [1, 2, 3, 4, 5, 6]
-
- 반복하기(*)
-
- 기호는 리스트의 반복을 의미
- 문자열에서 "abc" * 3 = "abcabcabc"가 되는 것과 같은 의미
>>> a = [1, 2, 3] >>> a * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3]
-
- 리스트 길이 구하기
- len() 함수 사용
- 문자열, 리스트 외에 튜플과 딕셔너리에서도 사용 가능한 내장 함수
>>> a = [1, 2, 3] >>> len(a) 3
리스트의 수정과 삭제
- 리스트의 값 수정하기
>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]
- del 함수를 사용해 리스트 요소 삭제하기
- del 키워드 사용
- 형식: del 객체
>>> a = [1, 2, 3] >>> del a[1] >>> a [1, 3] >>> a = [1, 2, 3, 4, 5] >>> del a[2:] # a[2]부터 끝까지 삭제 >>> a [1, 2]
- del 키워드 사용
리스트 관련 함수
- 리스트에 요소 추가하기 – append
- 리스트의 맨 마지막에 요소 추가
>>> a = [1, 2, 3] >>> a.append(4) >>> a [1, 2, 3, 4]
- 어떤 자료형도 추가 가능
>>> a = [1, 2, 3] >>> a.append([5, 6]) >>> a [1, 2, 3, 4, [5, 6]]
- 리스트 정렬 – sort
- 리스트의 요소를 순서대로 정렬
>>> a = [1, 4, 3, 2] >>> a.sort() >>> a [1, 2, 3, 4]
- 문자의 경우 알파벳 순서로 정렬 가능
>>> a = ['a', 'c', 'b'] >>> a.sort() >>> a ['a', 'b', 'c']
- 리스트 뒤집기 - reverse
- 리스트를 역순으로 뒤집어 줌
- 요소를 역순으로 정렬하는 것이 아닌, 현재의 리스트 그대로 뒤집음
>>> a = ['a', 'c', 'b'] >>> a.reverse() >>> a ['b', 'c', 'a']
- 인덱스 반환 – index
- 요소를 검색하여 위치 값 반환
>>> a = [1, 2, 3] >>> a.index(3) # 3은 리스트 a의 세 번재(a[2]) 요소 2 >>> a.index(1) # 1은 리스트 a의 첫 번째(a[0] 요소 0
- 값이 존재하지 않으면, 값 오류 발생
>>> a.index(0) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 0 is not in list
- 리스트에 요소 삽입 - insert
- insert(a, b): a번째 위치에 b를 삽입하는 함수
>>> a = [1, 2, 3] >>> a.insert(0, 4) # a[0] 위치에 4 삽입 >>> a [4, 1, 2, 3]
>>> a.insert(3, 5) # a[3] 위치에 5 삽입 >>> a [4, 1, 2, 5, 3]
- 리스트 요소 제거 – remove
- remove(x): 리스트에서 첫 번째로 나오는 x를 삭제
>>> a = [1, 2, 3, 1, 2, 3] >>> a.remove(3) >>> a [1, 2, 1, 2, 3]
- 값이 여러 개인 경우 첫 번째 것만 삭제
>>> a.remove(2) >>> a [1, 1, 2, 3]
- 리스트 요소 끄집어 내기 - pop
- 리스트의 맨 마지막 요소를 돌려주고 해당 요소 삭제
- pop(x): 리스트의 x번째 요소를 돌려주고 해당 요소 삭제
>>> a = [1, 2, 3] >>> a.pop() 3 >>> a [1, 2] >>> a = [1, 2, 3] >>> a.pop(1) 2 >>> a [1, 3]
- 리스트에 포함된 요소 x의 개수 세기 – count
- 리스트에 포함된 요소의 개수 반환
- count(x): 리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 돌려주는 함수
>>> a = [1, 2, 3, 1] >>> a.count(1) 2
- 리스트 확장 - extend
- 리스트에 리스트를 더하는 함수
- extend(x): x에는 리스트만 올 수 있음
- a.extend([4, 5]) = a += [4, 5]
>>> a = [1, 2, 3] >>> a.extend([4, 5]) >>> a [1, 2, 3, 4, 5] >>> b = [6, 7] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6, 7]
튜플 자료형
튜플(tuple)이란?
- 리스트와 유사한 자료형
리스트 | 튜플 |
[ ]로 둘러쌈 | ( )로 둘러쌈 |
요솟값 생성 / 삭제 / 수정 가능 | 요솟값 변경 불가능 |
- 튜플은 1개의 요소만을 가질 때는 요소 뒤에 쉼표(,)를 반드시 붙여야 함 (예) t2 = (1, )
- 소괄호( )를 생략해도 무방함 (예) t4 = 1, 2, 3
- 프로그램이 실행되는 동안 값을 유지해야 한다면 튜플을, 수시로 값을 변경해야 하면 리스트 사용
>>> t1 = ()
>>> t2 = (1,)
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3
>>> t5 = ('a', 'b', ('ab', 'cd'))
튜플의 요솟값을 지우거나 변경하려고 하면?
- 튜플 요솟값을 삭제하려 할 때
>>> t1 = (1, 2, 'a', 'b')
>>> del t1[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
- 튜플 요솟값을 변경하려 할 때
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0] = 'c'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
튜플 다루기
- 인덱싱하기
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0]
1
>>> t1[3]
'b'
- 슬라이싱하기
>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:]
(2, 'a', 'b')
- 튜플 더하기와 곱하기
>>> t2 = (3, 4)
>>> t1 + t2
>>> t3 = t1 + t2
>>> t3
(1, 2, 'a', 'b', 3, 4)
>>> t2 = (3, 4)
>>> t3 = t2 * 3
>>> t3
(3, 4, 3, 4, 3, 4)
- 튜플 길이 구하기
>>> t1 = (1, 2, 'a', 'b')
>>> len(t1)
4
딕셔너리 자료형
딕셔너리(dictionary)
- 대응관계를 나타내는 자료형
- 연관배열(associative array) 또는 해시(hash)
- Key와 Value를 한 쌍으로 갖는 자료형
- 순차적으로(sequential) 해당 요솟값을 구하지 않고, Key를 통해 Value를 바로 얻는 것이 특징
딕셔너리는 어떻게 만들까?
- Key와 Value의 쌍 여러 개(Key : Value)가 { }로 둘러싸임
- 각 요소는 쉼표(,)로 구분됨
# {Key1: Value1, Key2: Value2, Key3: Value3, ...}
>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> dic
{'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a = {1: 'hi'}
>>> a = { 'a': [1,2,3]}
딕셔너리 쌍 추가, 삭제하기
- 딕셔너리 쌍 추가하기
>>> a = {1: 'a'}
>>> a[2] = 'b' # {2:'b'} 쌍 추가
>>> a
{1: 'a', 2: 'b'}
>>> a['name'] = 'pey' # {'name':'pey'} 쌍 추가
>>> a
{1: 'a', 2: 'b', 'name': 'pey'}
>>> a[3] = [1, 2, 3] # {3: [1, 2, 3]} 쌍 추가
>>> a
{1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}
- 딕셔너리 요소 삭제하기
>>> del a[1] # Key가 1인 Key:Value 쌍 삭제
>>> a
{2: 'b'}
딕셔너리를 사용하는 방법
- Key로 Value 얻기
- 리스타나 튜플, 문자열은 요솟값 접근 시 인덱싱이나 슬라이싱 기법 중 하나를 사용
- 딕셔너리는 Key를 사용해 Value 접근
>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99
>>> a = {1:'a', 2:'b'}
>>> a[1] # Key가 1인 요소의 Value를 반환
'a'
>>> a[2] # Key가 2인 요소의 Value를 반환
'b'
- 딕셔너리를 사용할 때 주의할 사항
- 딕셔너리에는 동일한 Key가 중복으로 존재할 수 없음
>>> a = {1:'a', 1:'b'} # 1이라는 Key 값이 중복으로 사용 >>> a {1: 'b'} # 1: 'a' 쌍이 무시됨.
- 리스트는 그 값이 변할 수 있기 때문에 Key로 쓸 수 없으나 Value에는 아무 값이나 가능
>>> a = {[1,2] : 'hi'} # 리스트를 key로 사용
Traceback (most recent call last):
File "<stdin>", line 1, in <module> # 오류 발생
TypeError: unhashable type: 'list'
딕셔너리 관련 함수들
- Key 리스트 만들기 - keys
- Key만을 모아서 dict_keys 객체 리턴
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'} >>> a.keys() dict_keys(['name', 'phone', 'birth'])
- dict_key 객체를 리스트로 변환하는 방법
>>> list(a.keys()) ['name', 'phone', 'birth']
- 리스트처럼 사용할 수 있지만, 리스트 관련 함수(append, insert, pop, remove, sort 등)는 사용 불가능
>>> for k in a.keys(): ... print(k) ... name phone birth
- Value 리스트 만들기 - values
- Value만을 모아 dict_values 객체 리턴
>>> a.values() dict_values(['pey', '0119993323', '1118'])
- Key, Value 쌍 얻기 - items
- Key와 Value의 쌍을 튜플로 묶어 dict_items 객체 리턴
>>> a.items() dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])
- Key:Value 쌍 모두 지우기 - clear
- 딕셔너리 내의 모든 요소 삭제
- 빈 딕셔너리는 {}로 표현
python>>> a.clear() >>> a {}
- 해당 Key가 딕셔너리 안에 있는지 조사하기 - in
- Key가 딕셔너리 안에 존재하면 True, 존재하지 않으면 False 리턴
>>> a = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'} >>> 'name' in a True >>> 'email' in a False
- Key로 Value 얻기 (get)
- Key에 대응되는 Value 리턴
>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} >>> a.get('name') 'pey' >>> a.get('phone') '010-9999-1234'
- 존재하지 않는 키 사용 시 None 리턴
- 오류를 발생시키는 list와 차이가 있음
>>> a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} >>> print(a.get('nokey')) None >>> print(a['nokey']) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'nokey'
- Key 값이 없을 경우 미리 정해둔 디폴트 값을 대신 가져오도록 지정 가능
>>> a.get('nokey', 'foo') 'foo'
집합 자료형
집합(set)
- 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형
- set 키워드를 사용하여 생성
- set()에 리스트를 입력하여 생성
>>> s1 = set([1,2,3]) >>> s1 {1, 2, 3}
- set()에 문자열을 입력하여 생성
>>> s2 = set("Hello") >>> s2 {'e', 'H', 'l', 'o'}
집합 자료형의 특징
- 중복을 허용하지 않음
- 순서가 없음(Unordered)
- 리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 요솟값을 얻지만 set 자료형은 순서가 없기 때문에 인덱싱 사용 불가 (딕셔너리와 유사)
- 인덱싱 사용을 원할 경우 리스트나 튜플로 변환 필요
- list(), tuple() 함수 사용
>>> s1 = set([1,2,3]) >>> l1 = list(s1) >>> l1 [1, 2, 3] >>> l1[0] 1 >>> t1 = tuple(s1) >>> t1 (1, 2, 3) >>> t1[0] 1
교집합, 합집합, 차집합 구하기
- set 자료형을 유용하게 사용 가능
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])
- 교집합 구하기
- '&' 기호나 intersection() 함수 사용
>>> s1 & s2
{4, 5, 6}
>>> s1.intersection(s2)
{4, 5, 6}
- 합집합 구하기
- '|' 기호나 union() 함수 사용
>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
- 차집합 구하기
- '-' 기호나 difference() 함수 사용
>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}
>>> s1.difference(s2)
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}
집합 자료형 관련 함수
- 값 1개 추가하기 - add
>>> s1 = set([1, 2, 3])
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}
- 값 여러 개 추가하기 - update
>>> s1 = set([1, 2, 3])
>>> s1.update([4, 5, 6])
>>> s1
{1, 2, 3, 4, 5, 6}
- 특정 값 제거하기 - remove
>>> s1 = set([1, 2, 3])
>>> s1.remove(2)
>>> s1
{1, 3}
728x90
'03. Python' 카테고리의 다른 글
04. 흐름 제어 (2) | 2024.10.27 |
---|---|
02. 변수와 자료형 (3) | 2024.10.27 |
01. Python (7) | 2024.10.27 |