(一)空类型:None
1 >>> l = [1,2,3,8,89,77] 2 >>> x = l.sort() 3 >>> x 4 >>> type(x) 5 <class ‘NoneType‘> 6 因为sort()函数没有返回对象,即x没有指向任何对象。
1 >>> type(None) 2 <class ‘NoneType‘> #None是有自己的类型的,NoneType 3 >>> 4 >>> type(‘‘) #空字符串的类型还是str 5 <class ‘str‘>
所以千万不要把空字符串、None这两者搞混了
(二)类型对象 type (obj) ,参数可以是对象,也可以是表达式(因为表达式的作用就是生成对象的)。如果在写代码时不知道一个变量或对象的类型可以这么用。
1 >>> type(5) 2 <class ‘int‘> 3 >>> a = ‘王满意‘ 4 >>> type(a) 5 <class ‘str‘> 6 >>> type(3.14) 7 <class ‘float‘>
(三)布尔 bool : True、False 表示表达式条件是否成立
给大家扯点没用的:bool的本质
True 对应整数1
False 对应整数0
1 >>> True + 1 2 2
在实践中,用bool()函数判断一个对象是True、False更有用些,我所知道的几种类型的判断结果都已经列出来了,大家可以自己多练习一下看看判断结果。
1 >>> bool(‘‘) 2 False 3 >>> bool(0) 4 False 5 >>> bool(None) 6 False 7 >>> bool(1) 8 True 9 >>> bool(1.0) 10 True 11 >>> bool(‘王满意‘) 12 True 16 >>> def my_func(x): 17 pass 18 19 >>> bool(my_func) 20 True 21 >>> class my_cls(): 22 pass 23 24 >>> bool(my_cls) 25 True 26 >>> bool({‘s‘:1}) 27 True 28 >>> bool((1,2,3)) 29 True 30 >>>
>>> bool([])
False
总结:
(1)0,0.0,None ,空的对象(列表,字符串,元组,映射等) 是False
(2)其余的都是True
真值测试一般用于条件判断if,,,while等
(四)set ( 集 合 )
集 合 是 一 个 无 序 不 重 复 元素 的 集 。 基 本 功 能 包 括 关 系 测 试 和 消 除 重 复 元 素 。
集 合 对 象 还 支 持 union( 合并),intersection(交集),difference(差集)和 sysmmetric difference(对称差集)等数学运算。
大括号或 set() 函数可以用来创建集合。注意:想要创建空集合,你必须使用set() 而不是 {} 。{}用于创建空字典。
集合是无序的,也无法通过数字进行索引。
下面演示set的操作吧
1 #创建一个集合 2 >>> my_set={1,2,3,4,5,6,7,8} 3 4 #判断某个元素是否在集合中 5 >>> 4 in my_set 6 True 7 8 #向 s1 中增加元素 x 9 >>> s1 10 {1, 2, 6, 7, 8} 11 >>> s1.add(9) 12 >>> s1 13 {1, 2, 6, 7, 8, 9} 14 15 16 #从 s1 中删除元素 x, 如果x在s1中不存在则会报错 17 >>> s1 18 {1, 2, 6, 7, 8, 9} 19 >>> s1.remove(2) 20 >>> s1 21 {1, 6, 7, 8, 9} 22 >>> s1.remove(10) 23 Traceback (most recent call last): 24 File "<pyshell#261>", line 1, in <module> 25 s1.remove(10) 26 KeyError: 10 27 >>> 28 29 30 #如果在 s1 中存在元素 x, 则删除,没有的话不会报错 31 >>> s1 32 {1, 6, 7, 8, 9} 33 >>> s1.discard(6) 34 >>> s1 35 {1, 7, 8, 9} 36 >>> s1.discard(10) 37 >>> s1 38 {1, 7, 8, 9} 39 40 41 #删除并且返回 s1 中的一个不确定的元素, 如果s1为空则报错 42 >>> s1 43 {1, 7, 8, 9} 44 >>> s1.pop() 45 1 46 >>> s1 47 {7, 8, 9} 48 >>> s1.pop() 49 7 50 >>> s1.pop() 51 8 52 >>> s1.pop() 53 9 54 >>> s1.pop() 55 Traceback (most recent call last): 56 File "<pyshell#281>", line 1, in <module> 57 s1.pop() 58 KeyError: ‘pop from an empty set‘ 59 >>> 60 61 62 #获取集合中的元素个数 63 >>> len(my_set) 64 7 65 66 #删除 s1 中的所有的元素 67 >>> s1 = {1,2,3} 68 >>> s1 69 {1, 2, 3} 70 >>> s1.clear() 71 >>> s1 72 set() 73 74 75 76 #获得my_set()的一个复制,测试发现,这个复制会在内存中生成新的对象,即修改复制来的集合不会影响原集合中的元素值 77 >>> s = my_set.copy() 78 >>> s 79 {1, 2, 3, 4, 5, 6, 7} 80 >>> 81 >>> s.remove(7) 82 >>> my_set 83 {1, 2, 3, 4, 5, 6, 7} 84 >>> s 85 {1, 2, 3, 4, 5, 6} 86 87 88 #看看字符串作为set的参数的效果 89 >>> s_set = {‘my name is wangmany‘} 90 >>> s_set 91 {‘my name is wangmany‘} 92 >>> 93 >>> s_set = set(‘my name is wangmany‘) 94 >>> s_set 95 {‘n‘, ‘a‘, ‘w‘, ‘e‘, ‘i‘, ‘s‘, ‘g‘, ‘ ‘, ‘m‘, ‘y‘} 96 >>> 97 >>> #集合是可迭代对象哦 98 #可迭代对象的概念后面章节会介绍 99 >>> for c in s_set: 100 print(c) 101 102 n 103 a 104 w 105 e 106 i 107 s 108 g 109 110 m 111 y 112 >>> 113 114 #集合的另外一个杀手级的功能就是去重了 115 >>> l = [1,1,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,6,9,9,9,0] 116 >>> l 117 [1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 6, 6, 6, 9, 9, 9, 0] 118 >>> s = set(l) 119 >>> s 120 {0, 1, 2, 3, 4, 5, 6, 9} 121 >>> ll = list(s) 122 >>> ll 123 [0, 1, 2, 3, 4, 5, 6, 9] #太好使了,此处应该有双击666 124 >>> 125 126 127 >>> l = [1,2,3,4,5,6] 128 >>> s_set = { i for i in l} 129 >>> type(s_set) 130 <class ‘set‘> 131 132 #再创建一个集合,用于下边集合交、并、补的运算,这三个函数会返回新的集合,注意这一点哦 133 >>> your_set={4,5,6,7,8,9,10} 134 135 #获得两个集合的并集 136 >>> my_set.union(your_set) 137 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 138 139 #获得两个集合的交集 140 >>> my_set.intersection(your_set) 141 {4, 5, 6, 7} 142 143 #返回集合my_set中有但your_set中没有的元素,补集的概念 144 >>> my_set.difference(your_set) 145 {1, 2, 3} 146 147 --------------------------------------用符号进行集合的交并补运算看上去更直观简介 148 >>> my_set & your_set # 交集 149 150 >>> my_set | your_set # 并集 151 152 >>> my_set - your_set # 差集 153 154 -------------------------------------- 155 156 #下面这三个函数不会返回新的集合 157 #将集合y_set中的元素合并到s_set中 158 >>> y_set = {9,10} 159 >>> s_set.update(y_set) #等效于s_set |= y_set 160 >>> s_set 161 {1, 2, 3, 4, 5, 6, 9, 10} 162 163 164 #将my_set中不在your_set集合中的元素删除 165 >>> my_set.intersection_update(your_set) #等效于my_set &= your_set 166 >>> my_set 167 {4, 5, 6, 7} 168 169 170 #将my_set中在your_set集合中的元素删除 171 >>> my_set.difference_update(your_set) #等效于my_set -= your_set 172 >>> my_set 173 set() 174 >>> my_set.add(1) 175 >>> my_set.add(7) 176 >>> my_set 177 {1, 7} 178 >>> your_set 179 {4, 5, 6, 7, 8, 9, 10} 180 >>> my_set.difference_update(your_set) 181 >>> my_set 182 {1} 183 184 185 #将s1相对于s2的补集和s2相对于s1的补集放在s1中 186 >>> s1 = {1,2,3,4,5} 187 >>> s2 = {3,4,5,6,7,8} 188 >>> 189 >>> s1.symmetric_difference_update(s2) #等效于 s1 ^= s2 190 >>> s1 191 {1, 2, 6, 7, 8}
集合这部分的操作还是希望大家自己动手敲一遍代码的,光看文字不好理解,看汉字的定义很容易迷糊。
老梁:好记性不如碎嘴子,不如烂笔头。