Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자료구조
- 크루스칼
- 가상컴퓨팅
- DB
- data structure
- 코딩테스트
- cloud computing
- 자바의정석
- sql
- generic class
- dbms
- 코테
- spring
- 클라우드 컴퓨팅
- dfs
- 생성자
- 암호학
- python
- javascript
- 공개키 암호화
- JDBC
- 알고리즘
- jsp
- Stack
- Java
- BFS
- Algorithm
- MVC
- JPA
- Queue
Archives
- Today
- Total
PLOD
[python] Tuple , Dictionary(dict) , Set 본문
tuple() : (a,b,c,d...)
- 리스트는 [ ]으로 둘러싸지만 튜플은 소괄호 ( )로 둘러싼다.
- 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없기 때문에 데이터가 변조되지 않도록 저장할 수 있다.
- max 함수는 튜플 안에 있는 값 중 가장 큰 값을 반환
- min 함수는 튜플 안에 있는 값중 가장 작은 값을 반환
- sum 함수는 튜플 안에 있는 원소의 합을 반환
- count 함수는 튜플 안에 있는 특정 원소의 개수를 반환
- index 함수는 튜플 안에 있는 특정 원소의 인덱스를 반환
dict() : { Key1 : Value1 , Key2 : Value2 , Key3 : Value3 , ... }
- 딕셔너리는 이름 그대로 사전 형태의 자료형을 의미한다.
- 키(key)와 값(value)을 쌍을 데이터로 가지는 자료형이다.
- 앞서 다루었던 리스트나 튜플은 값을 순차적으로 저장한다는 특징이 있다. python의 dictionary 자료형은 hash table을 이용하므로 기본적으로 데이터의 검색과 수정에 있어서 O(1)로 매우 빠른 속도록 수행 할 수 있다
- 해시함수(Hash Function)를 사용하여 키를 해시값(Hash Value)로 변환
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
print(data)
{'사과' : 'Apple', '바나나' : 'Banana' , '코코넛' : 'Coconut'}
- 딕셔너리는 중괄호 '{}' 로 데이터 값을 둘러싼다.
- 딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.
- 이것이 바로 딕셔너리의 가장 큰 특징이다. 딕셔너리에서 value는 중복되어도 상관없지만, key는 중복될 수 없다.
- python의 딕셔너리는 해시로 되어있어 정렬되지 않고, 시간 복잡도가 O(1)이다.
시간 복잡도 | 기능 | 사용 예시 |
O(1) |
조회 | data[1] / data.get(key) |
값 할당 | data[1] = 1 | |
길이 가져오기 | len(data) | |
값 제거 | del data[key] / data.pop(key) / data.popitem() | |
딕셔너리 초기화 | data.clear() | |
딕셔너리 키 가져오기 | data.keys() | |
딕셔너리 키 삽입 | data[key].append(value) | |
O(n) |
딕셔너리 할당 | dict(data) / difaultdict(int) |
딕셔너리 전체 연산 | for i in data | |
딕셔너리 정렬 | data = sorted(data.items() , reverse=False) |
※ defaultdict()
defaultdict는 딕셔너리를 만드는 dict 클래스의 서브 클래스이다. 작동하는 방식은 거의 동일한데 , defaultdict()는 인자로 주어진 객체의 기본값을 딕셔너리 값을 괄호안의 자료형으로 초기 값으로 지정할 수 있다.
from collections import defaultdict
int_dict = defaultdict(int); # default 값이 int인 딕셔너리를 생성한다.
print(int_dict[1]);
ex) baekjoon 문제 1302 - 베스트셀러
https://www.acmicpc.net/problem/1302
N = int(input())
books = dict()
for _ in range(N) :
name = input()
if name in books : # 딕셔너리의 in은 key에 한해서 적용된다.
books[name] += 1
else :
books[name] = 1
max_val = max(books.values())
arr = []
for k,v in books.items() :
if v == max_val :
arr.append(k)
arr.sort()
print(arr[0])
set() : 집합
- 파이썬에서 set을 처리하기 위한 집합 자료형을 제공하고 있다.
- 집합은 기본적으로 리스트 혹은 문자열을 이용해서 만들 수 있는데, 집합은 다음과 같은 특징이 있다.
- set은 중복을 허용하지 않고 순서가 없다
- 집합 자료형은 순서가 없기 때문에 인덱싱을 사용할 수 없다. 하지만 시간복잡도가 딕셔너리와 같은 O(1) 이므로 빠른 속도를 자랑한다.
시간 복잡도 | 기능 | 사용 예시 |
O(n) | 길이 가져오기 | len(data) |
요소 추가 | data.add(5) | |
집합에 값이 있는 지 확인 | if 5 in data | |
값 제거 | data.remove(a) / data.discard(a) / data.pop() |
|
집합 초기화 | data.clear() |
※ data.remove(a) / data.discard(a)는 원소를 삭제한다는 점이 같지만 다른점은 discard는 원소가 없어도 KeyError를 생성하지 않는다.
시간 복잡도 | 기능 | 사용 예시 |
O(n) |
집합 할당 | data = set() |
집합 검사 | data == data2 , data != data2 | |
집합 비교 | data <= data2 , data >= data2 | |
집합 연산 | data | data2, data & data2 , data - data2 , data ^ data2 | |
집합 전체 연산 | for v in data | |
집합 복사 | data.copy() | |
집합 정렬 | data = sorted(data, reverse=false) |
a = set([1,2,3,4,5])
b = set([3,4,5,6,7])
a.add(6) # 집합 원소 추가
b.add(8)
a.update([7,8]) # 집합 여러 원소 추가
b.discard(3) # 집합 원소 제거
print(a|b) # 합집합
print(a&b) # 교집합
print(a-b) # 차집합
ex) baekjoon 7785 - 회사에 있는 사람
https://www.acmicpc.net/problem/7785
n = int(input())
company = set()
for _ in range(n) :
name,el = input().split()
if el == "enter" :
company.add(name)
else :
if name in company :
company.discard(name)
for name in sorted(company,reverse=True) :
print(name)
※ Counter
collections 모듈의 Counter 클래스는 말 그대로 각 원소가 몇개 있는지 세주는 클래스이다 . 파이썬에서 다음과 같이 Import 하여 Counter 클래스를 사용할 수 있다.
from collections import Counter
arr = [1,2,2,3,3,3]
arr_cnt = Counter(arr) # Counter({3: 3, 2: 2, 1: 1})
Counter 생성자는 중복된 데이터가 저장된 배열을 인자로 넘기면 각 원소가 몇 번씩 나오는지 저장된 객체를 얻게 된다.
각 배열의 원소를 딕셔너리의 키 값으로 생각하고 해당하는 원소의 개수를 value 값으로 생각하면 된다.
참고)
'개발 공부 > Python' 카테고리의 다른 글
[python] slicing(슬라이싱) 기본 (0) | 2022.11.01 |
---|---|
python[파이썬] 가상 환경 설정하기(windows) (0) | 2022.08.01 |
파이썬[python] 함수 (0) | 2022.07.30 |
파이썬[python] 클래스 , 상속 (0) | 2022.07.30 |
파이썬[python] 추상클래스 (0) | 2022.07.30 |
Comments