set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
举例:
>>> x = set('spend')
>>> y = set(['test'])
>>> x,y
({'n', 's', 'e', 'd', 'p'}, {'test'})
>>> x = set('good')
>>> y = set(['good'])
>>> x,y
({'g', 'd', 'o'}, {'good'}) #重复的会被删除
>>> x = set('good')
>>> y = set('google')
>>> x,y
({'g', 'd', 'o'}, {'g', 'l', 'o', 'e'})
>>> x & y #交集
{'g', 'o'}
>>> x | y #并集
{'g', 'l', 'o', 'e', 'd'}
>>> x - y #差集,项在x中,不在y中;
{'d'}
>>> y - x #差集,项在y中,不在x中;
{'l', 'e'}
>>> x ^ y #对称差集,项在x或者y中,但是不会同时出现在二者当中;
{'l', 'e', 'd'}
去掉列表里重复的元素:
>>> a = [111,222,333,444,333,555,111,777]
>>> b = set(a)
>>> b
{777, 555, 333, 111, 444, 222}
>>> c = [i for i in b]
>>> c
[777, 555, 333, 111, 444, 222]
集合:
集合(set)是一个无序的不重复元素序;
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典;
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 删除集合中的元素,该元素在指定的集合中不存在。 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
>>> s = set([3,5,8,10,20])
>>> t = set("Hello")
>>> s
{3, 5, 8, 10, 20}
>>> t
{'l', 'H', 'o', 'e'} #只显示了一个l;
>>>
>>> t.add('x') #在t中添加一个x;
>>> s.update([15,10,30]) #更新,原数据不变;
>>> t
{'H', 'x', 'l', 'o', 'e'}
>>> s
{3, 5, 8, 10, 15, 20, 30}
>>>
>>> t.remove('H') #remove()删除;
>>> t
{'x', 'l', 'o', 'e'}
>>> len(s) #set的长度;
7
>>>
>>> x in s #测试x是否是s的成员;
False
>>> x not in s #测试x是否不是s的成员;
True
>>>
>>> s.issubset(t) #是否t中的每个元素都在s中;
False
>>> s >= t
False
>>> s.union(t) #返回新的set包含s和t的每一个元素;
{3, 5, 8, 10, 15, 'x', 20, 'l', 'o', 'e', 30}
>>> s | t
{3, 5, 8, 10, 15, 'x', 20, 'l', 'o', 'e', 30}
>>>
>>> s.intersection(t) #返回s和t的公共元素
set()
>>> s & t
set()
>>>
>>> s.difference(t) #返回包含s中有的,但是t中没有的元素;
{3, 5, 8, 10, 15, 20, 30}
>>> s - t
{3, 5, 8, 10, 15, 20, 30}
>>> t - s #返回包含t中有的,但是s中没有的元素;
{'x', 'l', 'o', 'e'}
>>>
>>> s.symmetric_difference(t) #返回一个新的set包含s和t中不重复的元素;
{3, 5, 8, 10, 15, 'x', 'l', 'o', 20, 'e', 30}
>>> s ^ t
{3, 5, 8, 10, 15, 'x', 'l', 'o', 20, 'e', 30}
>>> s.copy() #返回set "s"的一个浅拷贝
{3, 20, 5, 8, 10, 30, 15}
运算符:
>>> s.update(t) #返回增加了set “t”中元素后的set “s”
>>> s
{3, 5, 8, 10, 15, 'x', 20, 'l', 'o', 'e', 30}
>>> s |= t
>>> s
{3, 5, 8, 10, 15, 'x', 20, 'l', 'o', 'e', 30}
>>>
>>> s.intersection_update(t) #返回只保留含有 set “t”中元素的 set “s”
>>> s
{'x', 'l', 'o', 'e'}
>>> s &= t
>>> s
{'x', 'l', 'o', 'e'}
>>>
>>> s = set([3,5,8,10,20])
>>> t = set("Hello")
#返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”
>>> s.symmetric_difference_update(t)
>>> s
{3, 'H', 5, 8, 10, 20, 'l', 'o', 'e'}
>>> s ^= t
>>> s
{3, 5, 8, 10, 20}
>>> s ^= t
>>> s
{3, 'H', 5, 8, 10, 20, 'l', 'o', 'e'}
>>> s.add("x") #set “s”中添加元素x;
>>> s
{3, 5, 8, 10, 'x', 20}
>>> s.remove("x") #从set “s”中删除元素x;
>>> s
{3, 5, 8, 10, 20}
>>> s.discard(x) #如果set “s”中存在元素x,则进行删除;
>>> s
{3, 5, 8, 10, 20}
>>> s.pop() #随机删除并返回set "s"中的一个元素,如果为空则引发 KeyError;
3
>>> s
{5, 8, 10, 20}
>>> s.clear() #删除set “s”中的所有元素;
>>> s
set()