一、集合的定义
定义:由不同元素组成的集合,集合中是一组无序排列的可哈希值,可以作为字典的Key,集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值。
值得注意的是,集合中的元素一定是无序的,一定是无序的,一定是无序的!重要的事情说三遍,例如想从集合中删除某个元素:
s = {1,2,3,4}
s.pop() #输出结果为 {2,3,4}
上面的代码表面上看是从左边开始删除,但实际上并不是,重新一段代码:
s = {'s',1,2,3,4}
s.pop() #输出结果为 {2,3,4,'s'}
可以看到开头的‘s’并没有被删除,因此可以再次确认,集合里的元素是无序的!想要删除指定的元素,可以使用remove()搞定。但最好是用discard()来删除,如果集合中没有找到对应的元素,remove()会直接报错导致程序崩溃,而discard()则不会。
二、集合的关系运算——交,差,并,交叉补集
- 求交集
p_s = {111,222,333}
l_s = {111,222}
print(p_s.intersection(l_s)) #求交集方法1
print(p_s & l_s) #求交集方法2
- 求并集
p_s = {111,222,333}
l_s = {111,222}
print(p_s.union(l_s)) #求并集方法1
print(p_s | l_s) #求并集方法2
- 求差集
p_s = {111,222,333}
l_s = {111,222}
print(p_s.difference(l_s)) #求差集方法1
print(p_s - l_s) #求差集方法2
- 求交叉补集(先并,用并出的结果减去交集的部分)
p_s = {111,222,333}
l_s = {111,222}
print(p_s.symmetric_difference(l_s)) #求交叉补集方法1
print(p_s ^ l_s) #求交叉补集方法2
- 判断两个集合是否有交集 —— xxx.isdisjoint()
返回值:Ture or False - 判断一个集合是否是另外一个集合的子集 —— xxx.issubset()
返回值:Ture or False - 判断一个集合是否是另外一个集合的父集 —— xxx.issuperset()
返回值:Ture or False - 定义一个不可变集合方法:frozenset()
三、函数
- 定义格式
def test(x):
"The function definitions"
x += 1
return x
此处函数的定义和C语言的基本一样,就是前缀有不同,一般C语言的函数前缀都要定义返回值类型,比如int、float等等,没有则填void空, 而Python在这里应当是将所有的类型都囊括进来了,相当于直接支持全部的类型,无论你return的值是什么,都可以,因此只要填def就代表此处要定义一个函数了。此外,函数当中有一个特殊的东西叫过程,二者的区别就是:过程没有返回值,而函数有返回值,仅此而已。
注意:C语言中的返回值只能是一个,而且与开头函数定义时所规定的返回类型相同,但Python不一样,Python可以返回多个值,多个值被放在一个元组里,其实也相当于是返回了一个值,只不过被打包起来了而已。
- 形参与实参
形参变量只有在被调用时才分配内存单元,在调用结束时,即可释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
调用形参与实参时有两种方式:
(1)标准调用:实参与形参位置一一对应
(2)关键字调用:位置无需一一对应
如果混合使用,位置参数必须在关键字参数左边,并且也要保证每个形参都有值传入。另外,参数组可以输入可变长的,*列表,**字典。