Lesson 13
在Python中,数据结构形式有很多,包括:Set、List、Tuple和Dictionary。本节详细介绍一下Set,我们先新建一个set集合,用dir()得到它能使用的函数。
example = set()
dir(example) # the following functions is what 'set()' can use
['__and__',
'__class__',
'__contains__',
'__delattr__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__iand__',
'__init__',
'__init_subclass__',
'__ior__',
'__isub__',
'__iter__',
'__ixor__',
'__le__',
'__len__',
'__lt__',
'__ne__',
'__new__',
'__or__',
'__rand__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__ror__',
'__rsub__',
'__rxor__',
'__setattr__',
'__sizeof__',
'__str__',
'__sub__',
'__subclasshook__',
'__xor__',
'add',
'clear',
'copy',
'difference',
'difference_update',
'discard',
'intersection',
'intersection_update',
'isdisjoint',
'issubset',
'issuperset',
'pop',
'remove',
'symmetric_difference',
'symmetric_difference_update',
'union',
'update']
我们首先尝试给set增加一个元素,从dir中,可以找到具有该功能的add()函数。
help(example.add) # get help from API document
Help on built-in function add:
add(...) method of builtins.set instance
Add an element to a set.
This has no effect if the element is already present.
从文档我们得知,add()函数可以给set增加一个元素,不管这个元素是否出现过,意思就是说:如果增加的这个元素set里有,不会报错。我们尝试给example增加各种类型的元素:
example.add(42)
example.add(False)
example.add(3.1415926)
example.add('String')
print(example)
{False, 42, 3.1415926, 'String'}
set的每一个成分被称为element(元素),每个元素可以是任意类型的数据。
下面讲一个set与其他数据结构不同的地方:
example.add(42)
print(example)
{False, 42, 3.1415926, 'String'}
由这个例子可以得到,set在增加元素的时候会做一个交集的操作,增加的元素如果set里有就不加了。我们也可以用len()函数看一下set此时的长度,证明一下:
len(example)
4
与增加相对应的是去除,set可以使用remove()进行操作:
help(example.remove)
Help on built-in function remove:
remove(...) method of builtins.set instance
Remove an element from a set; it must be a member.
If the element is not a member, raise a KeyError.
意思就是说去除set中的一个元素,但是给的变量一定要是set中存在的,否则报错。
example.remove(42)
len(example)
3
example
{3.1415926, False, 'String'}
下面介绍另一个去除元素的函数discard:
help(example.discard)
Help on built-in function discard:
discard(...) method of builtins.set instance
Remove an element from a set if it is a member.
If the element is not a member, do nothing.
从文档介绍我们可以找出不同,discard函数在遇到给定变量不是set中元素的时候,不会报错。
example.discard(50) # 50 is not in example
example # piece and quiet, sometimes it is more convenient than remove()
{3.1415926, False, 'String'}
讲到这里,再介绍两个快速建立set和快速清空set的方法:
example2 = set([23,34.23,'string2',True])
len(example2)
> 4
example2.clear()
len(example2)
> 0
到此讲完set增加和删除的全部函数,下面讲一下对set并集[union]交集[intersection]的操作:
# Integers 1 - 10
odds = set([1,3,5,7,9])
evens = set([2,4,6,8,10])
primes = set([2,3,5,7])
composites = set([4,6,8,9,10])
odds.union(evens)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
evens.union(odds)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
odds # unchanged
{1, 3, 5, 7, 9}
evens # unchanged
{2, 4, 6, 8, 10}
odds.intersection(primes)
{3, 5, 7}
primes.intersection(evens)
{2}
odds.intersection(evens) # 空
set()
以上就是并集交集的操作,那么如何去判断一个变量是否在set中呢,这个在循环中是经常用到的,python中使用的 in 和 not in :
2 in primes
True
6 not in evens
False
当然,除了以上操作,还有很多需要去发现,用dir()、help() 去探索吧。
Youtube source:
https://www.youtube.com/watch?v=bY6m6_IIN94&list=PLi01XoE8jYohWFPpC17Z-wWhPOSuh8Er-