python集合数据类型,用set()创建一个无序不重复元素集,是一个无序且不重复元素集,相当于没有value只有key的字典,基本功能包括关系测试和消除重复元素,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
1、创建空集合:
>>> st = set()
>>> st
set()
>>> type(st)
<class 'set'>
>>>
2、创建非空集合:用set(iterable)或{}来创建。
>>>
>>> st1 = {'h','e','l','l','o',' ','w','o','r','l','d'}
>>> print(type(st1), st1)
<class 'set'> {'h', 'l', 'r', 'e', 'o', ' ', 'w', 'd'}
>>> st4 = set(['h','e','l','l','o',' ','w','o','r','l','d'])
>>> print(type(st4), st4)
<class 'set'> {'h', 'l', 'r', 'e', 'o', ' ', 'w', 'd'}
>>> st5 = set(('h','e','l','l','o',' ','w','o','r','l','d'))
>>> print(type(st5), st5)
<class 'set'> {'h', 'l', 'r', 'e', 'o', ' ', 'w', 'd'}
>>>
>>> st6 = set({'a':1,'b':2,'c':3})
>>> print(type(st6), st6)
<class 'set'> {'c', 'a', 'b'}
>>>
3、add()增加一个元素。不会产生新集合。
>>> st1
{'h', 'l', 'r', 'e', 'o', ' ', 'w', 'd'}
>>> st1.add('A')
>>> st1
{'h', 'l', 'r', 'e', 'A', 'o', ' ', 'w', 'd'}
>>>
4、update(iterable)增加多个元素。iterable为任意序列。
>>> st
{1, 2, 3, 4, 5}
>>> st1 = set((6,7,8,9,10))
>>> st1
{6, 7, 8, 9, 10}
>>> st.update(st1)
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>>
>>> st = set((1,2,3,4,5))
>>> st
{1, 2, 3, 4, 5}
>>> st.update([5,6,7,8,9,10])
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>>
5、remove()删除一个元素。如果不存在该元素则报异常。
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st.remove(1)
>>> st
{2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st.remove(11)
Traceback (most recent call last):
File "<pyshell#71>", line 1, in <module>
st.remove(11)
KeyError: 11
>>>
6、discard(...) 如果存在该元素则删除,如果不存在则不理。
| Remove an element from a set if it is a member.
|
| If the element is not a member, do nothing.
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st.discard(10)
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> st.discard(11)
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>>
7、clear()清空元素。
>>> st
{2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st.clear()
>>> st
set()
>>> type(st)
<class 'set'>
>>>
8、len()计算元素个数。
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>>
>>> len(st)
9
>>>
9、pop(...)随机取一个元素,如果集合为空集合,则报异常。
| Remove and return an arbitrary set element.
| Raises KeyError if the set is empty.
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> st.pop()
1
>>> st
{2, 3, 4, 5, 6, 7, 8, 9}
>>>
>>> stt = set()
>>> stt.pop()
Traceback (most recent call last):
File "<pyshell#89>", line 1, in <module>
stt.pop()
KeyError: 'pop from an empty set'
>>>
10、copy(...)
| Return a shallow copy of a set.
>>> st
{2, 3, 4, 5, 6, 7, 8, 9}
>>> sstt = st.copy()
>>> sstt
{2, 3, 4, 5, 6, 7, 8, 9}
>>> id(st)
45938504
>>> id(sstt)
45940296
>>> sstt.add(1)
>>> sstt
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> st
{2, 3, 4, 5, 6, 7, 8, 9}
>>> st.discard(9)
>>> st
{2, 3, 4, 5, 6, 7, 8}
>>> sstt
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>>
11、set与数学中的集合类似,是无序的和无重复元素的集合。因此,在Python中,set可以进行交集、并集、补集等操作。
数学符号 | Python符号 | 含义 |
- 或\ | - | 差集,相对补集 |
∩ | & | 交集 |
∪ | | | 并集 |
≠ | != | 不等于 |
= | == | 等于 |
∈ | in | 是成员关系 |
∉ | not in | 非成员关系 |
>>> st
{2, 3, 4, 5, 6, 7, 8}
>>> st1 = set([1,2,3,4,5])
>>> st1
{1, 2, 3, 4, 5}
>>> a = st & st1
>>> a
{2, 3, 4, 5}
>>>
>>> b = st | st1
>>> b
{1, 2, 3, 4, 5, 6, 7, 8}
>>>
>>> c = st - st1
>>> c
{8, 6, 7}
>>>
>>> st == st1
False
>>>
12、issubset()判断一个集合是否是另一个集合的子集。
>>> lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst2 = [1, 3, 5, 7, 9]
>>> set(lst1).issubset(set(lst2))
False
>>> set(lst2).issubset(set(lst1))
True
>>>
13、issuperset()与issubset()相反。
>>>
>>> set1 = set(lst1)
>>> set2 = set(lst2)
>>> set1.issuperset(set2)
True
>>> set2.issuperset(set1)
False
>>>
14、set1.intersection(set2)返回set1和set2中相同部分,等价的运算符为&。
>>>
>>> set2.add(99)
>>> set2
{1, 3, 99, 5, 7, 9}
>>> set1.intersection(set2)
{1, 3, 5, 7, 9}
>>>
15、set1.union(set2)返回一个新集合,新集合包含set1,set2的所有元素,等价的运算符为|。
>>>
>>> set1.union(set2)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 99}
>>>
16、set1.difference(set2)返回的集合为set1中去除含有的set2中的元素,等价的运算符为-。
>>>
>>> set1.difference(set2)
{8, 2, 4, 6}
>>> set2.difference(set1)
{99}
>>>
17、set1.symmetric_difference(set2),返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。
>>>
>>> set1.symmetric_difference(set2)
{2, 99, 4, 6, 8}
>>> set2.symmetric_difference(set1)
{2, 99, 4, 6, 8}
>>>