创建集合:
s = { 'P' , 'y' , 't' , 'h' , 'o' , 'n' } s = set ([ 'P' , 'y' ]) # 从列表创建 s = set () # 空集合 print type (s) #<class 'set'> d = {} # 空字典 print type (d) #<class 'dict'> |
集合可以有任意数量的元素,它们可以是不同的类型
(例如:数字、元组、字符串等)。但是,集合不能有可变元素(例如:列表、集合或字典)
123 | s = { 1 , 2 , 3 } # ×××的集合 s = { 1.0 , 'Python' , ( 1 , 2 , 3 )} # 混合类型的集合 s = { 1 , 2 , [ 3 , 4 ]} # 报错,不能有可变元素 |
集合的特性:
1、无序性,不支持是索引
2、互异性,每个元素只能出现一次
3、确定性 s in set
集合与内置函数
all() 如果iterable的所有元素不为0、''、False或者iterable为空,all(iterable)返回True,否则返回False;函数等价于:
12 | print all ([ 'a' , 'b' , 'c' , 'd' ]) #列表list,元素都不为空或0 print all ([ 0 , 1 , 2 , 3 ]) # False 列表list,存在一个为0的元素 |
#空元组、空列表返回值为True,这里要特别注意。
any(iterable)说明:参数iterable:可迭代对象;
如果当iterable所有的值都是0、''或False时,那么结果为False,如果所有元素中有一个值非0、''或False,那么结果就为True
12 | print any ([ 'a' , 'b' , 'c' , 'd' ]) #True print any (( 0 , '', False )) #False |
enumerate()返回一个枚举对象,其中包含了集合中所有元素的索引和值(配对)。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
#enumerate(sequence, [start=0]) start -- 下标起始位置。
seasons = [ 'Spring' , 'Summer' , 'Fall' , 'Winter' ] print list ( enumerate (seasons)) #[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] print list ( enumerate (seasons, start = 1 )) # [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')] |
seq = [ 'one' , 'two' , 'three' ] for i, element in enumerate (seq): print i, seq[i] |
等价于
12345 | i = 0 seq = [ 'one' , 'two' , 'three' ] for element in seq: print i, seq[i] i + = 1 |
len()返回对象(字符、列表、元组等)长度或项目个数
str = "runoob" print len ( str ) # 字符串长度6 l = [ 1 , 2 , 3 , 4 , 5 ] print len (l) # 列表元素个数5 |
max()返回给定参数的最大值,参数可以为序列。
print "max(80, 100, 1000) : " , max ( 80 , 100 , 1000 ) #max(80, 100, 1000) : 1000 print "max(-20, 100, 400) : " , max ( - 20 , 100 , 400 ) print "max(-80, -20, -10) : " , max ( - 80 , - 20 , - 10 ) print "max(0, 100, -400) : " , max ( 0 , 100 , - 400 ) |
min()返回给定参数的最小值,参数可以为序列。
print "min(80, 100, 1000) : " , min ( 80 , 100 , 1000 ) #80 print "min(-20, 100, 400) : " , min ( - 20 , 100 , 400 ) print "min(-80, -20, -10) : " , min ( - 80 , - 20 , - 10 ) print "min(0, 100, -400) : " , min ( 0 , 100 , - 400 ) |
sorted(iterable[, cmp[, key[, reverse]]])
参数说明: iterable - - 可迭代对象。 cmp - - 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回 1 ,小于则返回 - 1 ,等于则返回 0 。 key - - 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse - - 排序规则,reverse = True 降序 , reverse = False 升序(默认)。 |
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
a = [ 5 , 7 , 6 , 3 , 4 , 1 , 2 ] b = sorted (a) print a,b #[5, 7, 6, 3, 4, 1, 2] [1, 2, 3, 4, 5, 6, 7] L = [( 'b' , 2 ),( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 )] print sorted (L, cmp = lambda x,y: cmp (x[ 1 ],y[ 1 ])) #[('a', 1), ('b', 2), ('c', 3), ('d', 4)] students = [( 'john' , 'A' , 15 ), ( 'jane' , 'B' , 12 ), ( 'dave' , 'B' , 10 )] print sorted (students, key = lambda s: s[ 2 ]) # 按年龄排序 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] print sorted (students, key = lambda s: s[ 2 ], reverse = True ) # 按降序 [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] |
sum()返回集合的所有元素之和
不可变集合 frozenset , frozenset 是不可变的,所以没有添加或删除元素的方法。
1 | s = frozenset ( 'Python' ) |
s.copy()
s.union()
s.difference()
s.symmetric_difference()
s.intersection()
s.isdisjoint()
s.issubset()
s.issuperset()
集合的方法:
增加:
set.copy() 返回集合的浅拷贝
set.add() 将元素添加到集合中
set.update() 用自己和另一个的并集来更新这个集合
A = set ( 'boy' ) A.add( 'python' ) print A #set(['y', 'python', 'b', 'o']) 是把要传入的元素做为一个整个添加到集合中 A.update( 'Hello' ) print A #set(['b', 'e', 'python', 'H', 'l', 'o', 'y']) ,传入的元素拆分,做为个体传入到集合中 A = { 'runoob' } A.add( '134' ) B = A.copy() print A # set(['134', 'runoob']) print B # set(['runoob', '134']) |
删除:
set.clear() 删除集合中的所有元素
set.discard() 删除集合中的一个元素(如果元素不存在,则不执行任何操作)
set.pop() 删除并返回任意的集合元素(如果集合为空,会引发 KeyError)
set.remove() 删除集合中的一个元素(如果元素不存在,会引发 KeyError)
A = set ( 'python' ) A.discard( 'P' ) #删除不存在的元素不会报错 print A A.remove( 'p' ) #删除不存在的元素会报错 print A # set(['h', 'o', 'n', 't', 'y']) print A.pop() #h,删除并返回任意的集合元素 print A #set(['o', 'n', 't', 'y']) A.clear() print A #set([]) |
更新:
set.difference_update()
set.intersection_update() 用自己和另一个的交集来更新这个集合
set.symmetric_difference_update() 用自己和另一个的对称差来更新这个集合
A = set ( 'abcd' ) B = set ( 'cdef' ) A.intersection_update(B) #返回None,用结果更新A print A #set(['c', 'd']) A = set ( 'abcd' ) B = set ( 'cdef' ) A.difference_update(B) #返回None,用结果更新A print A #set(['a', 'b']) A = set ( 'abcd' ) B = set ( 'cdef' ) A.symmetric_difference_update(B) #返回None,用结果更新A print A #set(['a', 'b', 'e', 'f']) |
查询:
set.union() 将集合的并集作为一个新集合返回
set.difference() 将两个或多个集合的差集作为一个新集合返回
set.symmetric_difference() 将两个集合的对称差作为一个新集合返回
set.intersection() 将两个集合的交集作为一个新集合返回
set.isdisjoint() 如果两个集合有一个空交集,返回 True
set.issubset() 如果另一个集合包含这个集合,返回 True
set.issuperset() 如果这个集合包含另一个集合,返回 True
A = set ( 'abcd' ) B = set ( 'cdef' ) C = set ( 'ab' ) D = set ( 'xyz' ) print C < A , C.issubset(A) # 判断C是否是A的子集 print A > C , A.issuperset(C) # 判断A是否是C的超集 print A.isdisjoint(B),A.isdisjoint(D) #判断两个集合是否不相交 print A | B, A.union(B) # 判断A和B的并集,合并A和B print A & B, A.intersection(B) # 判断A和B的交集,set(['c', 'd']) 只获取A和B中相同的部分 print A - B , A.difference(B) # 求A和B的差集,set(['a', 'b']) ,只获取A中不同的部分 print A ^ B , A.symmetric_difference(B) #A和B的对称差集 set(['a', 'b', 'e', 'f']) ,只获取两个集合不同的部分 |