Python 学习笔记 集合
python常见集合包括有tuple,list,dict,set
首先是tuple:
tuple是元组 ,是不能修改的tuple的格式是()
a=('a','b','c','d')#元祖的设置 a.count('b')#返回 对应元素的数量 a.index('c')#返回对应元素的索引(第一个) del a #删除元组
可变元组:
a=(1,2,['a','b']) a[2][0]#输出a a[2][0]='zxc' a[2][0]#输出zxc
元组陷阱:
a=(1) type(a)#int类型 a=(1,) type(a)#tuple类型
第二个是list:
list是可以修改的,list的格式是[]
a=[1,2,3,4,5,6,7,8]#list的设置方式 a.append(9)#在末尾添加一个元素 a.count(3)#返回对应元素的数量 a.extend([9,10])#在末尾添加一个literable的元素,此时a=[1,....,8,9,10] a.index(3)#返回对应元素的索引(第一个) a.insert(3,10)#在索引值之前插入一个元素 a.pop(3)#删去对应索引的元素,默认是最后一个 a.remove(8)#删去对应值的元素 a.reverse()#排序反转 a.sort()#排序 默认reverse=False
'x' in a | 'x' not in a#元素是否在list中
第三个是dict:
dict是可以修改的,无序的,dict没有重复的元素,key一样的话后面的value会覆盖之前的value,dict的格式是{}:
a={'a':'z','b':'y','c':'x'}#dict的设置方法
a.clear()#清除dict的所以元素,a还是dict
a.copy()#浅拷贝 拷贝之后的dict id与a的id不同(?) 而使用b=a拷贝的dict id一致貌似是深拷贝不是浅拷贝 dict的doc错了(?)
b=('age','name','address')
a.fromkeys(b,20)#给a添加3个元素key是b中的元素,value都是20 返回新值
a.get('c')#根据key取value
a.has_key('b')#a中是否有某个key 拥有返回True 否则返回False
b=a.items()#将dict按照tuple返回[('a', 'z'), ('c', 'x'), ('b', 'y')]
a.keys()#返回a的key集合(list)
a.pop('c')#根据key删除元素
a.popitem()#删除第一个key value pair 并返回该pair
a.update({'a':100})#根据key更新dict 没有该key则向dict添加一个元素
a.values()#返回values的list
字典添加:
dict = {} dict['key'] = 'a' print dict {'key': 'a'}
dict排序小工具:
按照value排序
def sort_dict_by_value_upper(d): "对字典排序 按照value顺序 升序" return sorted(d.items(), key=lambda d:d[1]) def sort_dict_by_value_lower(d): "对字典排序 按照value顺序 降序" return sorted(d.items(), key=lambda d:d[1],reverse=True) dict_test={'a':12,'b':1,'c':10,'d':13,'e':5} print sort_dict_by_value_upper(dict_test) #结果是[('b', 1), ('e', 5), ('c', 10), ('a', 12), ('d', 13)] print sort_dict_by_value_lower(dict_test) #结果是[('d', 13), ('a', 12), ('c', 10), ('e', 5), ('b', 1)]
按照key排序
dict_test={'a':12,'e':5,'c':10,'d':13,'b':1}
temp_keys=sorted(dict_test.keys())
for x in temp_keys:
print x,':',dict_test[x]
#结果
a : 12
b : 1
c : 10
d : 13
e : 5
最后一个set:
set是没有重复元素且无序的,所以可以用来将list中重复的元素去掉:
a=set([1,2,3,3,2,1])#去掉重复的元素 a=set({'a':1,'b':2,'c':3,'b':4,'a':5})#去掉重复的元素返回只有key的list a.pop()#索引从0开始删除 a.remove(3)#按value删除 a.add(10)#添加一个元素 a.clear()#清除set a还是set a.update([10,11,])#添加一个集合
集合的遍历:
list,set,tuple的方法都一样,dict不太一样:
a=[1,2,3,4,5] for x in a: print x b=(1,2,3,4,5) for x in b: print b c=set([1,2,3,4,5]) for x in c: print c d={'a':1,'b':2,'c':3} for x,y in d.items():#d.items()将key value pair 转换成 tuple(key,value) print x,y
集合的交集,并集,差集:
&交集 |并集 -差集
集合去重,将集合转换成set,再传唤会对应的集合类型:
a=[1,2,3,1,2,3,1,2,3]
a=set(a)
直接将字符串传入list,set,tuple中,可以直接生成字符串的集合:
list('abc') set('abc') tuple('abc') #结果分别是['a','b','c'] set(['a','b','c']) ('a','b','c')
下面是一些集合相关练习题
a = {'ab':'liming','ac':20}#已知字典:ainfo = {'ab':'liming','ac':20}
a.update({'sex':'man','age':20})#使用2个方法,输出ainfo = {'ab':'liming','ac':20,'sex':'man','age':20}
a = {'ab':'liming','ac':20}#使用2个方法,输出ainfo = {'ab':'liming','ac':20,'sex':'man','age':20}
a['sex']='man'
a['age']=20
print a
a = {'ab':'liming','ac':20}
print a.keys()#输出结果:['ab','ac']
print a.values()#输出结果:['liming',20]
print a.get("ab")#通过2个方法返回键名ab对应的值
print a['ab']#通过2个方法返回键名ab对应的值
a.pop('ac')#通过2个方法删除键名ac对应的值
del a['ac']#通过2个方法删除键名ac对应的值
print a
b = [1,2,3,4,5]#已知 列表b = [1,2,3,4,5] # b.extend([6,7,8])#用2种方法输出下面的结果:[1,2,3,4,5,6,7,8] c=[6,7,8]用2种方法输出下面的结果:[1,2,3,4,5,6,7,8] print b+c print b[-1:-3:-1]#用列表的2种方法返回结果:[5,4] b.reverse() print b[:2]#用列表的2种方法返回结果:[5,4] print 2 in b#判断2是否在列表里
b = [23,45,22,44,25,66,78]#已知 print [x for x in b if x % 2 == 1]#用列表解析生成索引的奇数 print ['the content %s ' % x for x in b if b.index(x) < 2]#输出结果: ['the content 23','the content 45'] a.pop() a.append(80) print a#输出结果: [25, 47, 24, 46, 27, 68, 80]'''
#将tuple转换成list 操作完成后在转换回来 a = (1,4,5,6,7)#已知 print 4 in a# 判断元素4是否在元组里 b=list(a) b[b.index(5+1)]=8# 把元素5修改成8 a=tuple(b)#转换成tuple
setinfo = set('acbdfem')#已知 finfo = set('sabcdef')#已知 setinfo.add('abc')#添加字符串对象'abc'到集合setinfo setinfo.remove('m')#删除集合setinfo里面的成员m print setinfo & finfo#求2个集合的交集和并集 print setinfo | finfo
浙公网安备 33010602011771号