创建集合:
s = {'P', 'y', 't', 'h', 'o', 'n'} s = set(['P', 'y']) # 从列表创建 s = set() # 空集合 print type(s) #d = {} # 空字典 print type(d) #
集合可以有任意数量的元素,它们可以是不同的类型
(例如:数字、元组、字符串等)。但是,集合不能有可变元素(例如:列表、集合或字典)
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;函数等价于:
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
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]
等价于
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 是不可变的,所以没有添加或删除元素的方法。
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']) ,只获取两个集合不同的部分