首先了解集合有什么特点。
集合(set)是python中的一种存放数据的仓库,和列表,字典,元组等等数一样的。
set的一些特点:
- 可以用花括号”{“来定义
- 其中的元素没有序列,也就是非序列类型的数据。
- set中的元素不可重复这个就是类似于dict的键。
|
|
这里可以了解到set类型中的元素是不允许有重复的。
由于set元素不重复的特点,可以使用set去重:
类似的,使用set()方法对字典进行去重,不指定参数的情况下默认的是对字典的键转换成集合的形式。但是字典中的键是不允许重复的(其实是出现了重复的情况的时候,后面的会将前面的值覆盖掉)。但是字典的值是可以出现重复的,假设有一个字典dict1 = {'name1':'...', 'name2':'...','name3':'...','name4':'...'},我们对其中的值可以去重:set1 = set(dict1.values())
set类型有一些常用的方法:
add()方法添加元素,添加已有的元素不会报错。
1234567>>> nums = {1,2,3}>>> nums.add(1)>>> nums{1, 2, 3}>>> nums.add(4)>>> nums{1, 2, 3, 4}pop()方法,弹出集合中的第一个元素,并且将其删除
12>>> nums.pop()1remove()方法,删除集合中的元素,必须有参数,传进来的参数是要删除的元素的值
1234567>>> nums.remove()Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: remove() takes exactly one argument (0 given)>>> nums.remove(2)>>> nums{3, 4}update()方法,向集合中添加元素,但是传入的元素必须是可以遍历的值,然后拆开放入集合中,当不传入参数额时候就不对原来的集合做改动
123456>>> nums.update()>>> nums{3, 4}>>> nums.update('string')>>> nums{3, 4, 't', 'i', 'n', 'g', 'r', 's'}copy()方法就像它的名字一样,就是对集合的一个浅复制,对得到的复制的集合和对当前的集合操作,都互不影响。
1234567891011121314151617181920212223>>> nums1 = nums.copy()>>> nums1{3, 4, 't', 'i', 'n', 'g', 'r', 's'}>>> nums.remove('i')>>> nums{3, 4, 't', 'n', 'g', 'r', 's'}>>> nums1{3, 4, 't', 'i', 'n', 'g', 'r', 's'}>>> nums1.remove('s')>>> nums1{3, 4, 't', 'i', 'n', 'g', 'r'}>>> nums{3, 4, 't', 'n', 'g', 'r', 's'}>>> 3 in numsTrue>>> 7 in nums1False>>> 8 not in numsTrue>>> nums.add('i')>>> nums{3, 4, 't', 'i', 'n', 'g', 'r', 's'}
下面的这几个操作和离散数学中的一些概念很类似:
判断前面的集合(这里是nums1)中的所有的元素是不是后面的集合(这里是nums)里都存在
123456>>> nums1 <= numsTrue>>> nums1 >= numsFalse>>> nums >= nums1True分隔符”|”在这里是求并集的意思
12>>> nums|nums1{3, 4, 't', 'i', 'n', 'g', 'r', 's'}‘&’在这里是求交集的意思,就是返回两个集合的公共的元素
12>>> nums&nums1{3, 4, 't', 'i', 'g', 'n', 'r'}减号’-‘在这里是求差集的意思,也就是返回一个只在前面的集合(nums)存在并且不在后面的集合(nums1)中存在的元素。
12>>> nums - nums1{'s'}‘^’返回一个集合,其中的元素是两者不一样的部分,在这里是(ums-nums1) | (nums1 - nums)
12>>> nums ^ nums1{'s'}可以看到1或者12这样的整形数是不能遍历的,而’123’这样的字符串,甚至’1’这样的字符串都是可以遍历的
12345678910111213141516>>> nums{3, 4, 't', 'i', 'n', 'g', 'r', 's'}>>> nums.update(1)Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: 'int' object is not iterable>>> nums.update(12)Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: 'int' object is not iterable>>> nums.update('12')>>> nums{3, 4, 't', 'i', '1', '2', 'n', 'g', 'r', 's'}>>> nums.update('1')>>> nums{3, 4, 't', 'i', '1', '2', 'n', 'g', 'r', 's'}