当前位置: 移动技术网 > IT编程>脚本编程>Python > Python笔记--8 变量那些事(5)set

Python笔记--8 变量那些事(5)set

2020年07月30日  | 移动技术网IT编程  | 我要评论

集合(set)

基本知识
  • Python中的set定义:set是一个无序的、没有重复元素的的集合;一个set是由 { } 和其内部的元素组成的,内部的元素可以是任何类型(必须是可哈希的)。
  • set的特点:
    • 无序:也就是不能像列表或者元组那样使用下标访问集合中的元素
    • 可变的:可以添加、删除元素等操作
    • 不重复:集合中的每个元素是唯一的,不会出现两个及以上相同的元素;正因为这个特点,所以经常使用set对数据进行去重
  • 举个栗子:
a = [1, 2, 3, 4, 1]
b = list(set(a))
print(a,"\n", b)
# [1, 2, 3, 4, 1] 
# [1, 2, 3, 4]

可以看到,原本列表中有两个1,将列表转化成set后,会把重复的元素去掉,最后再转化成列表输出
函数
set()
功能:创建集合
注意:不管是空集合还是非空集合都可以使用set()函数来创建函数,但是{}只能创建非空集合;因为后面讲到的字典也是使用{}来包含元素的,所以Python规定{}创建空的变量时为空字典。
举例:
a = {1, 2.0, "3", "hello"}
b = set([1, 2.0, "3", "hello"]) #传入的参数必须为可迭代的对象,例如列表、元组等
-----------------------------------------------------------------------------------------
set.add(x)
功能:向集合中添加一个元素
举例:
a = {1, 2, 3, 5}
print(a.add(4))
print(a)
#None  add()函数没有返回值,因为新的元素是直接添加在原来的集合中,所以不会创建新的集合
#{1, 2, 3, 4, 5} 这是添加新元素后的集合;可以看到集合中的元素会自动的排序,但是这并不能说明set是有序的,因为我们所说的有序,是指可以通过下标来获取元素

注意:上面已经提到过,set中的元素必须是hashable(可哈希)的,因为set和dic(字典)是通过hash值进行索引,所以它们包含的元素也必须是hashable的;但是列表是不通过hash值进行索引的;所以集合中不能包含列表
a = {1, 2, 3, 5, [1,2]}
# TypeError: unhashable type: 'list'

另外要说明的:
a = [1,2,3]
b = set(a)
这是没有任何问题的,因为在这里set()的作用是讲一种类型转化为其他类型,所以不用关心是不是hashable
 
a = {1, 2, 3, 5, (1,2)}
print(a)
# {(1, 2), 1, 2, 3, 5}
因为元组是hashable的,所以可以作为set的元素	
-----------------------------------------------------------------------------------------
set.update(list)
功能:上面我们提到过,列表不能作为set的元素,但是列表的元素可以一个一个拿出来添加到set中,但是也必须保证拿出来的元素不是列表(因为列表可以嵌套),所以使用这个函数,就可以把一个列表中的元素全部添加到set中。
举例:
a = {1,2}
b = [3,4]
a.update(b)
print(a)
# {1, 2, 3, 4}

a = {1,2}
b = [3,4,[5,6]]
a.update(b)
print(a)
# TypeError: unhashable type: 'list'
# 必须保证拿出来的元素不是列表(因为列表可以嵌套)
-----------------------------------------------------------------------------------------
set.remove(x)
功能:删除元素x, 若元素x不存在,则报错
举例:
a = {1, 2, 3}
print(a.remove(1))
print(a)
# None  直接在原set中删除,不创建新的set
# {2, 3}
print(a.remove(4))
# KeyError: 4  不存在元素4
-----------------------------------------------------------------------------------------
set.discard(x)
功能:删除x(如果存在);相比remove(),这个函数在不存在要删除的元素时不会报错
举例:
a = {'1', 2, 3}
a.discard(1)
print(a)
#{'1', 2, 3}
a.discard(2)
print(a)
#{'1', 3}
------------------------------------------------------------------------------------------
set.clear()
功能:删除所有元素
------------------------------------------------------------------------------------------
set.pop()
功能:随机选择一个元素删除,并将这个删除的元素作为返回值
举例:
a = {1, 2, 3, 4}
print(a.pop())
print(a.pop())
#1
#2
---------------------------------------------------------------------------------------------
lenset)
集合size
---------------------------------------------------------------------------------------------
set.issubset(myset)
功能:判断set是不是myset的子集(按照数学上的定义即可)
举例
a = {1, 2, 3}
b = {1, 2}
print(a.issubset(b))
print(b.issubset(a))
# False
# True
-------------------------------------------------------------------------------------------
set.issuperset(myset)
功能:判断myset是不是set的子集
举例:
a = {1, 2, 3}
b = {1, 2}
print(a.issuperset(b))
print(b.issuperset(a))
# True
# False
-------------------------------------------------------------------------------------------
集合的运算:
1)并集:set.union(myset) #所以元素的集合
2) 交集:set.intersection(myset) #公共元素的集合
3) 差集:set.difference(myset) #set减去公共元素
4) 对称差集:set.symmetric_difference(myset) #两者非公共的元素的集合 
举例:
a = {1, 2, 3}
b = {3, 4, 5}
print(a.union(b))
print(a.intersection(b))
print(a.difference(b))
print(a.symmetric_difference(b))
# {1, 2, 3, 4, 5}
# {3}
# {1, 2}
# {1, 2, 4, 5}

本文地址:https://blog.csdn.net/qq_44761397/article/details/107643824

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网