集合的基本概念
集合(或简称集)是基本的数学概念,它是集合论的研究对象。最简单的说法,即是在最原始的集合论─朴素集合论─中的定义,集合就是“一堆东西”。集合里的“东西”,叫作元素。若然 x 是集合 A 的元素,记作 x ∈ A。
集合是现代数学中一个重要的基本概念。集合论的基本理论直到十九世纪末才被创立,现在已经是数学教育中一个普遍存在的部分,在小学时就开始学习了。这里对被数学家们称为“直观的”或“朴素的”集合论进行一个简短而基本的介绍;更详细的分析可见朴素集合论。对集合进行严格的公理推导可见公理化集合论。
集合的创建
创建集合的方法
方法1: a = { 1, “python”} 例如:
>>> a = {1,"python"}
>>> a
set(['python', 1])
>>>
>>>> type({1,"python"})
<type 'set'>
>>>
>>>
>>> b = {"google","facebook"}
>>> b
set(['google', 'facebook'])
>>>
方法2: s = set(“Xiaoxu”) 例如:
>>> s = set("Xiaoxu")
>>> s
set(['a', 'i', 'o', 'u', 'x', 'X'])
>>>
>>> type(s)
<type 'set'>
>>>
注意:集合的元素没有顺序,不可重复
空的集合创建方法,例如:
>>> b = {} #该语句表明 b 是个字典,并不是集合
>>> b.add("python")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'add'
>>> b = set() #该语句表明 b 是个集合
>>> b.add("python")
>>> b
set(['python'])
>>>
可哈希与不可哈希:
所有不可变的对象都是可哈希的,例如数字、字符串、元组。
注意:
frozenset()创建的集合是不可变的,即是可哈希的
集合中的元素必须是可哈希的
反之,所有可变的对象都是不可哈希的,例如,列表,字典,集合。
list()和set()函数
list()和set()函数可完成列表和集合的转换。代码如下:
['a', 'i', 'o', 'u', 'x', 'X']
>>> a = [1,2,2,3,3,3]
>>> s = set(a) #此处转换集合
>>> s
set([1, 2, 3])
>>>
>>>
>>> a = list(s) #此处转换列表
>>> a
[1, 2, 3]
>>>
集合:可变集合、不可变集合
set()函数创建的集合是可变集合
frozenset()函数创建的集合是不可变集合
集合的常用方法
add()的用法:
>>> help(set.add)
Help on method_descriptor:
add(...)
Add an element to a set.
This has no effect if the element is already present.
>>>
若使用add()继续添加集合已经存在的某种元素,该方法会失效。只能添加集合中不存在的元素,例如:
>>> a = {"google","facebook"}
>>> a.add("twitter") #添加表中不存在的元素
>>> a
set(['twitter', 'google', 'facebook'])
>>> a.add("google") #添加表中已存在的元素,失效
>>> a
set(['twitter', 'google', 'facebook'])
>>>
update()的用法:
>>> help(set.update)
Help on method_descriptor:
update(...)
Update a set with the union of itself and others.
>>>
举例如下:
>>> b = {'python',(1,2,3)}
>>> b.update("xiaoxu")
>>> b
set(['a', 'python', 'o', (1, 2, 3), 'i', 'u', 'x'])
>>>
pop()的用法:
>>> help(set.pop)
Help on method_descriptor:
pop(...)
Remove and return an arbitrary set element.
Raises KeyError if the set is empty.
>>>
pop()函数从集合中随机删除一个元素,并返回。缺点是不能删除某个指定的元素,而且pop()函数没有参数,例如:
>>> b = set(['a', 'python', 'o', (1, 2, 3), 'i', 'u', 'x'])
>>> b.pop()
'a'
>>> b.pop()
'python'
>>> b
set(['o', (1, 2, 3), 'i', 'u', 'x'])
>>>
remove()的用法:
>>> help(set.remove)
Help on method_descriptor:
remove(...)
Remove an element from a set; it must be a member.
If the element is not a member, raise a KeyError.
>>>
remove(values)中values是指要删除的元素,必须指定values的值,不能为空。例如:
>>> b = set(['a', 'python', 'o', (1, 2, 3), 'i', 'u', 'x'])
>>> b.remove("a")
>>> b
set(['python', 'o', (1, 2, 3), 'i', 'u', 'x'])
>>>
discard()的用法:
>>> help(set.discard)
Help on method_descriptor:
discard(...)
Remove an element from a set if it is a member.
If the element is not a member, do nothing.
>>>
discard(values)中values是指要删除的元素,必须指定values的值,不能为空。例如:
>>> f = set(['a', 'python', 'o', (1, 2, 3), 'i', 'u', 'x'])
>>> f.discard("a")
>>> f
set(['python', 'o', (1, 2, 3), 'i', 'u', 'x'])
>>>
clear()的用法:
>>> help(set.clear)
Help on method_descriptor:
clear(...)
Remove all elements from this set.
>>>
clear()函数能够一次性把集合中的元素全部删除,例如:
>>> g = set(['python', 'o', (1, 2, 3), 'i', 'u', 'x'])
>>> g.clear()
>>> g
set([])
>>>
集合运算
元素与集合的关系:
>>> s = set([1,2,3,4])
>>> 1 in s
True
>>> 8 in s
False
>>>
集合与集合的关系:
>>> a = set([1,2,3,4,5])
>>> b = set([1,2,3,4,5])
>>> id(a) #此处说明 a 和 b 是不同的对象
40805000
>>> id(b)
40807280
>>> a == b #此处说明 a 和 b 两个集合的元素是相等的
True
>>>
一个集合是另一个集合的子集的判断方法:
第一种方法:
>>> a = set([1,2,3,4])
>>> b = set([1,2,3,4,5])
>>> a < b
True
>>>
第二种方法:
>>> a = set([1,2,3,4])
>>> b = set([1,2,3,4,5])
>>> a.issubset(b)
True
>>>
注意:若A是B的子集,则B是A的超集
一个集合是另一个集合的超集的判断方法:
第一种方法:
>>> a = set([1,2,3,4])
>>> b = set([1,2,3,4,5])
>>> a > b
True
>>>
第二种方法:
>>> a = set([1,2,3,4])
>>> b = set([1,2,3,4,5])
>>> b.issuperset(a)
True
>>>
并集:
第一种方法:
>>> a = set([0,1,3,6])
>>> b = set([2,1,4,3])
>>> a|b
set([0, 1, 2, 3, 4, 6])
第二种方法
>>> a = set([0,1,3,6])
>>> b = set([2,1,4,3])
>>> a.union(c)
set([0, 1, 2, 3, 4, 6])
>>>
交集:
第一种方法:
>>> a = set([0,1,3,6])
>>> b = set([2,1,4,3])
>>> a &b
set([1, 3])
>>>
第二种方法:
>>> a = set([0,1,3,6])
>>> b = set([2,1,4,3])
>>> a.intersection(c)
set([1, 3])
>>>
集合的差(补)
第一种方法:
>>> a = set([0,1,3,6])
>>> b = set([2,1,4,3])
>>> a-b
set([0, 6])
>>>
第二种方法:
>>> a = set([0,1,3,6])
>>> b = set([2,1,4,3])
>>> a.difference(b)
set([0, 6])
>>>
集合与集合不同的部分:
>>> a = set([0,1,3,6])
>>> b = set([2,1,4,3])
>>> a.symmetric_difference(b)
set([0, 2, 4, 6])
>>>