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

 

 

posted on 2015-08-04 16:45  绯村  阅读(229)  评论(0)    收藏  举报