Set集合底层可以通过红黑树与哈希表实现,和字典dict的区别就是字典中每个元素存储了key和value,而集合则只存储了value。python中的set应该也是用的哈希表,我本来想通过pycharm看看set的源码,结果一看是这样的。
具体内容居然是pass,看了看资料才知道,原来这是pycharm自行创建的假的set类,真正的set类使用c语言写的,这么做也是为了较好的代码提示,更容易理解。但还是有一些标准库是通过python实现的,如os,这些代码通过追踪就能看到源码了。而字典dict底层就是用c语言通过哈希表实现的。字典源码:字典dict源码。
创建集合使⽤ {} 或 set() , 但是如果要创建空集合只能使⽤ set() ,因为 {} ⽤来创建空字典。
# 1.用{}
set1={
"hello", "world"}
print(set1)
# 2.用() 构造方法
set2=set()
print(set2)
set3=set("nihao")
print(set3)
{
'world', 'hello'}
set()
{
'o', 'h', 'a', 'n', 'i'}
add(elem)
Add element elem to the set.
因为集合有去重功能,所以,当向集合内追加的数据是当前集合已有数据的话,则不进⾏任何操作。
set1={
2,4,5}
set1.add(43)
print(set1)
{
2, 43, 4, 5}
update(*others)
set |= other | ...
Update the set, adding elements from all others.
update() 追加的数据是序列。序列就是那些可以迭代的类,字符串、列表、元组之类的。
set1={
2,4,5,43}
set1.update([2,4,5,6])
print(set1)
{
2, 4, 5, 6, 43}
remove(),删除集合中的指定数据,如果数据不存在则报错。
s1={
4,5,67}
s1.remove(67)
print(s1)
{
4, 5}
discard(),删除集合中的指定数据,如果数据不存在也不会报错。
s1={
4,5,67}
s1.discard(68)
print(s1)
{
67, 4, 5}
pop()
Remove and return an arbitrary element from the set.
Raises KeyError if the set is empty.
pop(),随机删除集合中的某个数据,并返回这个数据。
s1={
4,5,67}
print(s1.pop())
print(s1)
67
{
4, 5}
用in和not in 就完事了。
s1={
4,5,67,7}
print(4 in s1)
print(5 not in s1)
True
False