1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 class hashTable: def __init__(self): self.size = 10 self.table = [[] for _ in range(self.size)] def hashfunc(self, key, size): return key % size def insert(self, key, value): position = self.hashfunc(key, self.size) key_exists = False bucket = self.table[position] # 동일 key 값 사용 여부 검사 for i, kv in enumerate(bucket): k, v = kv if key == k: key_exists = True break # key 값 존재하는 경우 value replace if key_exists: bucket[i] = ((key, value)) # 존재하지 않는 경우 key-value 쌍 추가 else: bucket.append((key, value)) def search(self, key): position = self.hashfunc(key, self.size) bucket = self.table[position] for i, kv in enumerate(bucket): k, v = kv if key == k: return v def delete(self, key): position = self.hashfunc(key, self.size) key_exists = False bucket = self.table[position] for i, kv in enumerate(bucket): k, v = kv if key == k: key_exists = True break if key_exists: del bucket[i] print('Key {} deleted'.format(key)) else: print('Key {} not found'.format(key)) cs
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | class hashTable: def __init__(self): self.size = 10 self.table = [[] for _ in range(self.size)] def hashfunc(self, key, size): return key % size def insert(self, key, value): position = self.hashfunc(key, self.size) key_exists = False bucket = self.table[position] # 동일 key 값 사용 여부 검사 for i, kv in enumerate(bucket): k, v = kv if key == k: key_exists = True break # key 값 존재하는 경우 value replace if key_exists: bucket[i] = ((key, value)) # 존재하지 않는 경우 key-value 쌍 추가 else: bucket.append((key, value)) def search(self, key): position = self.hashfunc(key, self.size) bucket = self.table[position] for i, kv in enumerate(bucket): k, v = kv if key == k: return v def delete(self, key): position = self.hashfunc(key, self.size) key_exists = False bucket = self.table[position] for i, kv in enumerate(bucket): k, v = kv if key == k: key_exists = True break if key_exists: del bucket[i] print('Key {} deleted'.format(key)) else: print('Key {} not found'.format(key)) | cs |
underscore
- index가 필요없는 for문을 작성할 경우에 사용 가능
for _ in range(10):
print("hello")
enumerate
- 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 index 값을 포함하는 enumerate 객체를 리턴
for i, name in enumerate(['body', 'foo', 'bar']):
print(i, name)
0 body
1 foo
2 bar
- enumerate를 for문과 함께 사용하면 자료형의 현재 순서와 그 값을 쉽게 알 수 있음
- for문처럼 반복되는 구간에서 객체가 현재 어느 위치에 있는지 알려주는 index 값이 필요할 때 enumerate 함수를 사용하면 매우 유용
Tuple의 packing과 unpacking
- Packing: Tuple에 여러 개의 값을 넣는 것
>>> a = 5
>>> b = 'test'
>>> c = a, b
>>> print(c)
(5, 'test')
- Unpacking: 패킹된 Tuple에서 여러 개의 값을 꺼내오는 것
>>> a = (63, 'building')
>>> b, c = a
>>> b
63
>>> c
'building'
'Software Convergence > Data Structure' 카테고리의 다른 글
Hash Table(해쉬 테이블)의 구현 (1) | 2018.08.27 |
---|---|
Priority Queue(우선순위 큐)의 구현 (0) | 2018.08.26 |