4.2 튜플(tuple)
튜플은 데이터의 형태가 리스트와 동일 하지만 표현 방법과 사용 용도는 차이가 있습니다.
- 리스트는 자료를 [과 ]으로 감싸지만 튜플은 (와 )으로 감싸줍니다.
- 리스트는 내부 요소들을 수정, 삭제할 수 있지만 튜플은 불가능 합니다.
튜플은 프로그램이 진행되는 동안 요소들의 값이 변경되거나 삭제되지 않고 프로그램이 종료 할때 까지 동일한 값으로 참조해야 하는 데이터를 정의 하는데 사용됩니다. 리스트에서 사용되는 함수들 중 값을 변경하거나 삭제하는 부분을 제외하고는 거의 비슷하게 사용이 가능 합니다.
4.2.1 튜플 만들기
단순히 1개의 숫자, 1개의 문자, 1개의 문자열을 포함할 수도 있지만 그보다는 숫자들의 집합, 문자들의 집합을 하나로 묶어놓은 변수의 개념입니다.
>>> one = (1) >>> a = (1, 2, 3, 4, 5) >>> b = ('a', 'b', 'c', 'd') >>> ab =(1, 2, 3, 4, 5, 'a', 'b', 'c', 'd') >>> c = (1, 2, 'apple', 'banana') >>> d = (1, 2, (3, 4), ('apple', 'banana'), True, False) |
동일한 자료 형으로 튜플을 표현하지 않고 여러 자료 형을 혼합되어 생성 하거나 튜플에 튜플을 포함하여 새로운 튜플 생성이 가능 합니다.
튜플에 튜플을 요소로 추가해서 표현도 가능 합니다.
>>> a = (1, 2, 3, 4, 5) >>> b = ('a', 'b', 'c', 'd') >>> ab = (a, b) >>> print(ab) ((1, 2, 3, 4, 5), ('a', 'b', 'c', 'd')) |
4.2.2 튜플 인텍싱
4.2.2.1 튜플 값 꺼내기
튜플에 들어있는 각각의 값들을 구별해 사용하기 위하여 첫 번째, 두 번째, 세 번째… 이런식으로 번호를 부여 하는데 이것을 인덱싱이라고 하며 0부터 시작을 합니다. 즉, 첫 번째가 0, 두 번째가 1… 이렇게 순서가 정해 집니다.
d = (1, 2, (3, 4), ('apple', 'banana'))
여기에서 d[0]은 1, d[1]은 2가 되며 튜플에 튜플이 포함되어도 하나의 요소로 처리가 되기 때문에 d[2]는 (3, 4)가 됩니다..
d[-1]은 맨 마지막 값인 (“apple”, “banana”)으로 d[3]과 동일 합니다.
그럼 apple을 가리키려면 어떻게 해야 할까요? d의 3번째 요소에서 또다시 첫 번째인 d[3][0] 또는 d의 맨 마지막 요소 내의 첫 번째인 d[-1][0] 하면 됩니다.
>>> d = (1, 2, (3, 4), ('apple', 'banana')) >>> print(d[0], d[1], d[-1], d[3][0], d[-1][0]) 1 2 ('apple', 'banana') apple apple |
4.2.2.2 튜플 연산
- 덧셈(+)
덧셈 기호를 이용하여 튜플에 튜플을 더하여 정의 할 수 있습니다.
>>> a = ('apple', 'banana') >>> a = a + a >>> print(a) ('apple', 'banana', 'apple', 'banana') >>> b = (1, 2, 3, 4) >>> a = a + b >>> print(a) ('apple', 'banana', 'apple', 'banana', 1, 2, 3, 4) |
- 곱셈(*)
곱셈 기호를 이용하여 튜플에 숫자를 곱하는 것으로 정의 할 수 있습니다. 곱하는 정수 만큼 튜플이 복제 되어 추가 됩니다.
>>> a = ('apple', 'banana') >>> a = a * 3 >>> print(a) ('apple', 'banana', 'apple', 'banana', 'apple', 'banana') |
4.2.2.3 기타 기능
- len()
len()은 튜플 내부 요소들의 갯수를 구합니다. len(Tuple 명)으로 사용하며 전체 index 값을 반환 하고 튜플내에 튜플이 있어도 1개로 계산합니다.
>>> c = (1, 2, 3, (1, 2, 3), 1, 2, 3) >>> cnt = len(c) >>> print(cnt) 7 >>> len(c) 7 |
- index()
index()를 이용하여 값을 입력하면 튜플 내부에 값이 존재 하는 위치의 인덱스를 구할 수 있습니다. index(value)의 value에 찾으려는 값을 넣어주면 index를 반환합니다. 튜플 내부에 튜플이 포함된 경우에도 value에 튜플 값을 넣어주면 인덱스가 반환 됩니다.
>>> c = (1, 2, 3, (1, 2, 3), 1, 2, 3) >>> c.index(3) 2 >>> c.index((1,2,3)) 3 |
- 슬라이싱
튜플의 index를 이용하여 필요한 부분 만큼 값을 뽑아오는 방법입니다.
a[1:3] : index 값이 1보다 크거나 같고 3 미만(1<= a[index] < 3)
a[:3] : index 값이 처음부터 3 미만( a[index] < 3)
a[3:] : index 값이 3보다 크거나 같은 값(3 <= a[index])
>>> a = (1, 2, 3, 4, 5, 6, 7) >>> print(a[1:3]) (2, 3) >>> print(a[:3]) (1, 2, 3) >>> print(a[3:]) (4, 5, 6, 7) |
기타 리스트에서 사용할 수 있는 기능 중 값을 수정, 삭제, 추가하는 기능은 튜플에서 오류가 발생 합니다.
4.3 집합
단어 그대로 집합을 표현하기 위한 자료형 입니다. 선언은 set을 사용하여 정의 합니다. set의 특징은 중복 값을 추가할 수 없고 요소들의 배열 순서를 정할 수 없는 집합입니다.
4.3.1 집합 선언
집합은 set을 이용하여 따옴표로 값을 묶어 선언할 수 있으며 리스트를 집합으로 변환 가능 합니다.
>>> set('1122334455667788') {'7', '3', '1', '2', '6', '8', '5', '4'}
>>> set('aabbccddeeffgg') {'c', 'd', 'e', 'b', 'f', 'a', 'g'}
>>> set('AaBbCcDdEeFfGg') {'c', 'A', 'D', 'd', 'e', 'E', 'B', 'b', 'C', 'G', 'f', 'F', 'a', 'g'}
>>> set("aabbccdd") {'c', 'd', 'b', 'a'}
>>> ab = [1, 2, 3, 4, 5, 'a', 'b', 'c', 'd'] >>> aaa= set(ab) >>> print(aaa) {'c', 1, 2, 3, 4, 5, 'd', 'b', 'a'}
>>> d = set([1, 2, 3, 4, (5, 6), 5, 6, 7]) >>> print(d) {1, 2, 3, 4, 5, 6, 7, (5, 6)} |
4.3.2 집합 연산
- 합집합(|)
집합들의 중복 요소들을 제거하고 남은 요소들을 하나의 함수로 묶어 표현 합니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> b = set([5, 6, 7, 8, 9]) >>> c = set([7, 8, 9, 0, 1, 2, 3])
>>> ab = a | b >>> print(ab) {1, 2, 3, 4, 5, 6, 7, 8, 9} >>> a | b {1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> abc = a | b | c >>> print(abc) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} >>> a | b | c {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} |
- 교집합(&)
집합들에 공통으로 포함된 요소들만 추출 하여 하나의 집합으로 표현 합니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> b = set([5, 6, 7, 8, 9]) >>> c = set([7, 8, 9, 0, 1, 2, 3])
>>> anb = a & b >>> print(anb) {5, 6} >>> a & b {5, 6}
>>> anbnc = a & b & c >>> print(anbnc) set() >>> a & b & c set() |
- 차집합
집합에서 다른 집합과 공통된 요소를 제외하고 남은 요소 값들을 묶어 하나의 집합으로 표현 합니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> b = set([5, 6, 7, 8, 9]) >>> c = set([7, 8, 9, 0, 1, 2, 3])
>>> a_b = a - b >>> print(a_b) {1, 2, 3, 4} >>> a -b {1, 2, 3, 4}
>>> a_b_c = a - b - c >>> print(a_b_c) {4} >>> a - b - c {4} |
4.3.3 집합 함수
- add()
집합에 1개의 요소를 추가하는 경우에 사용 합니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> a.add(7) >>> print(a) {1, 2, 3, 4, 5, 6, 7} >>> # 1개 이상은 오류 발생 >>> a.add(7,8) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: add() takes exactly one argument (2 given) |
- update()
집합에 2개 이상의 요소를 추가하는 경우에 사용 합니다. 기존에 존재하는 값이 있으면 추가되지않습니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> a.add(7) >>> print(a) {1, 2, 3, 4, 5, 6, 7} >>> a.update([7, 8, 9]) >>> print(a) {1, 2, 3, 4, 5, 6, 7, 8, 9} |
- remove()
함수에 존재하는 요소를 삭제하는 경우에 사용 합니다. 한번에 하나씩만 삭제할 수 있습니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> a.remove(3) >>> print(a) {1, 2, 4, 5, 6}
>>> e = set([1, 2, 3, (4, 5), 4, 5]) >>> print(e) {1, 2, 3, 4, 5, (4, 5)} >>> e.remove((4,5)) >>> print(e) {1, 2, 3, 4, 5} |
- union()
합집합과 동일한 기능으로 집합들의 중복 요소들을 제거하고 남은 요소들을 하나의 함수로 묶습니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> b = set([5, 6, 7, 8, 9]) >>> c = set([7, 8, 9, 0, 1, 2, 3]) >>> ab = a.union(b) >>> print(ab) {1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> abc = a.union(b).union(c) >>> print(abc) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} |
- intersection()
교집합과 동일한 기능으로 집합들에 공통으로 포함된 요소들만 추출 합니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> b = set([5, 6, 7, 8, 9]) >>> c = set([7, 8, 9, 0, 1, 2, 3]) >>> >>> anb = a.intersection(b) >>> print(anb) {5, 6} >>> anbnc = a.intersection(b).intersection(c) >>> print(anbnc) set() |
- difference()
차집합과 동일한 기능으로 집합에서 다른 집합과 공통된 요소를 제외하고 남은 요소 값을 구합니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> b = set([5, 6, 7, 8, 9]) >>> c = set([7, 8, 9, 0, 1, 2, 3])
>>> a_b = a.difference(b) >>> print(a_b) {1, 2, 3, 4} >>> a_b_c = a.difference(b).difference(c) >>> print(a_b_c) {4} |
- copy()
함수의 값을 다른 함수에 복사하는 경우 사용 합니다. 복사된 함수는 전혀 다른 객체입니다.
>>> a = set([1, 2, 3, 4, 5, 6]) >>> acopy = a.copy() >>> print(acopy) {1, 2, 3, 4, 5, 6}
>>> a.remove(3) >>> print(acopy) {1, 2, 3, 4, 5, 6} >>> print(a) {1, 2, 4, 5, 6} |
4.4 딕셔너리(Dictionary)
데이터를 key와 value의 쌍 형태로 선언하는 자료 형을 딕셔너리라고 합니다. 표현 방법은 key와 value를 {과 }으로 감싸주고 쉼표(,)로 요소들을 구분해 줍니다. 입력된 요소들은 순서가 없이 보관되고 key를 이용해서만 접근이 가능 합니다. 사용할 수 있는 묶음형 자료 중 튜플은 가능하지만 set이나 list를 사용하면 오류가 발생 합니다.
단순히 key와 value의 매칭 이므로 의미가 없는 값들로 만들 수 도 있습니다.
>>> a = {1: 'a', 2: 'b', 3: 'c'} >>> b = {'a': 1, 'b': 2, 'c': 3} >>> c = {'a': 'aaaa', 'b':'bbbb', 'c': 'cccc'} >>> d = {1.1: 2, 2.1: 9, 0.1: 4} >>> e = {(1, 2): 9, (4, 1): 0} |
key가 중복되도록 선언은 할 수 있지만 기존에 선언된 값은 다음에 입력한 값으로 대체되어 마지막에 입력한 key 값을 리턴 합니다.
>>> a = {1: 2, 1: 3, 1: 9} >>> a {1: 9} |
4.4.1 찾기
딕셔너리에 key를 대입하면 key와 조합된 value를 리턴 합니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> a[1] 'a' >>> a[(4,5)] 'c' |
- get()을 이용하여 value를 리턴 받을 수 있습니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> a.get(2) 'b' >>> a.get((4,5)) 'c' |
4.4.2 추가
새로운 key와 value를 대입하여 신규 쌍을 추가 할 수 있습니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> a[3] = 'ddd' >>> a['no'] = 1 >>> a {1: 'a', 2: 'b', (4, 5): 'c', 3: 'ddd', 'no': 1} |
4.4.3 수정
추가하는 방법과 동일하게 key를 이용하여 새로운 value를 입력하면 수정할 수 있습니다. 사실 이건 수정이라기 보다는 딕셔너리가 중복을 허용하지 않고 동일한 key에 대해서는 나중에 입력한 값으로 덮어쓰는 기능을 이용하는 것 입니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> a[1] = 'aaaa' >>> a {1: 'aaaa', 2: 'b', (4, 5): 'c'} |
4.4.4 삭제
del을 이용하여 하나의 요소 쌍을 삭제 할 수 있습니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> del a[2] >>> a {1: 'a', (4, 5): 'c'} >>> del a[(4,5)] >>> a {1: 'a'} |
4.4.5 함수
- keys()
딕셔너리의 key에 해당하는 요소들을 추출해서 dict_keys()에 담아 리턴 합니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> a.keys() dict_keys([1, 2, (4, 5)]) |
- values()
딕셔너리의 value에 해당하는 요소들을 추출해서 dict_values()에 담아 리턴 합니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> a.values() dict_values(['a', 'b', 'c']) |
- items()
딕셔너리의 요소들을 dict_items()에 담아 리턴 합니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> a.items() dict_items([(1, 'a'), (2, 'b'), ((4, 5), 'c')]) |
- copy()
새로운 변수를 생성해서 딕셔너리를 복사합니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c', 3: 'ddd', 'no': 1} >>> b = a.copy() >>> b {1: 'a', 2: 'b', (4, 5): 'c', 3: 'ddd', 'no': 1} |
- clear()
딕셔너리에 있는 모든 요소들을 삭제 합니다.
>>> a = {1: 'a', 2: 'b', (4, 5): 'c'} >>> a.clear() {} |
- copy coding -
'Tensorflow > Python' 카테고리의 다른 글
Python 기초 학습 6-1 함수 람다 (0) | 2019.03.16 |
---|---|
Python 기초 학습 5 제어문 (0) | 2019.03.12 |
Python 기초 학습 4-1 자료구조 (리스트) (0) | 2019.03.04 |
python 기초 학습 3 연산자 (0) | 2019.03.01 |
python 기초 학습 2 (데이터 형, 변수) (0) | 2019.02.26 |