Python之哈希表-哈希表原理
集合Set
- 集合,简称集。由任意个元素构成的集体。高级语言都实现了这个非常重要的数据结构类型。
- Python中,它是可变的、无序的、不重复的元素的集合
初始化
- set() -> new empty set object
- set(iterable) -> new set object
元素性质
- 去重:在集合中,所有元素必须相异
- 无序:因为无序,所以不可索引
- 可哈希:Python集合中的元素必须可以hash,即元素都可以使用内建函数hash
- 目前学过不可hash的类型有:list、set、bytearray
- 可迭代:set中虽然元素不一样,但元素都可以迭代出来
增加
- add(elem)
- update(*others)
- 合并其他元素到set集合中来
- 参数others必须是可迭代对象
- 就地修改
删除
- remove(elem)
- 从set中移除一个元素
- 元素不存在,抛出KeyError异常。为什么是KeyError?
- discard(elem)
- pop() -> item
- 移除并返回任意的元素。为什么是任意元素?
- 空集返回KeyError异常
- clear()
修改
- 集合类型没有修改。因为元素唯一。如果元素能够加入到集合中,说明它和别的元素不一样。
- 所谓修改,其实就是把当前元素改成一个完全不同的元素,就是删除加入新元素。
索引
set()
{}, type({})
set(range(5)), {1, 2, 'abc'}, set((1, 2, 3)), {*range(5), *[1, 2, 3]}
{'1', 1, '1', 1, 2}, {1, (1,), 1, (1,)}
{1, *'abc', *(1, 2), *[1]}
{1, (1,), (), '', b'', None, True, False, range(5)}
set(range(5))
list(range(5))
{range(5)}
x = set()
x
x.add(1)
x
x.add('abc')
x
x.add(1)
x
x.update(range(3), 'abc')
x
x.update([1, 'abc', 2, 'xyz'])
x
- 因为add是把整个列表都加到集合中,因为列表不可哈希所以加不进去
- update是把列表中的所有内容,依次拿出添加到x集合中,所以可以加入
hash(1), hash('abc')
x.remove('a')
x
x.clear()
x.pop()
x.discard(-1)
-1 in x
'abc' in x
报错
{1, 'abc', (1, 2), [1]}
{1, {}}
{{1}}
{{1}, [1], {}}
x.add([1, 'abc', 2, 'xyz'])
hash([])
x.remove(-1)