字典,序列,集合,引用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典,序列,集合,引用相关的知识,希望对你有一定的参考价值。
#-*- coding:utf-8 -*- #------字典-------- '''字典类似于通过联系人名查找联系人的详细信息,即,把键(名字)和值(详细情况)联系在一起, 键必须唯一,只能使用不可变的对象如字符串来作为字典的键,但是可以把不可变或者可变对象作为 字典的值。基本说就是应该只使用 ''' #-------练习--------- email = {'张三':'[email protected]', '李四':'[email protected]', '王五':'[email protected]', '二大爷':'[email protected]' }; #下面用In来检查一个键值对是否存在,也可以用has_key if '李四' in email: print("李四的邮件是:"), email['李四']; if email.has_key('李四'): print("李四的邮件是:"), email['李四']; #李四的邮件是: [email protected] print ('二大爷的邮件是:'),email['二大爷']; #二大爷的邮件是: [email protected] print str(email).decode('string_escape'); #{'张三': '[email protected]', '李四': '[email protected]', '二大爷': '[email protected]', '王五': '[email protected]'} #delete a key-value pair del email ['张三']; print 'there are %d contacts in the email-book'%len(email); print ('there are {0} contacts in the email-dic'.format(len(email))); #there are 3 contacts in the email-book #add a key-value pair email ['赵六'] = '[email protected]'; # for name,email in email.items(): # print 'contact %s at %s'%(name,email); for name,email in email.items(): print ('email {0} at {1}'.format(name,email)); ''' contact 李四 at [email protected] contact 二大爷 at [email protected] contact 王五 at [email protected] contact 赵六 at [email protected] 这里使用字典的items方法,来使用字典中的每个键/值对,返回一个元组列表,其中每个元组都包含 一堆项目--键与对应的值,抓取这个对,然后分别赋给for..in循环中的变量name和email,再打印 这些值。 ''' #---------------------------------------------------------------------------------------------------------------------------- #------------序列---------- #对list进行操作 box = ['a','b','c','d','e','f','g']; print ('box:%s')%box; #box:['a', 'b', 'c', 'd', 'e', 'f', 'g'] #取单个项目 print('item 0 is:'),box[0]; #item 0 is: a print('item 1 is:'),box[1]; #item 1 is: b print('item -1 is:'),box[-1]; #item 1 is: g 从后往前取 #切片操作 #[start:end]冒号前为起始索引,冒号后为结束索引,包左不包右 print('item 1 to 3 is'),box[1:3]; #item 1 to 3 is ['b', 'c'] print('item 3 to end is:'),box[3:]; #item 3 to end is: ['d', 'e', 'f', 'g'] print('item 4 to -1 is:'),box[4:-1]; #item 4 to -1 is: ['e', 'f'] print('item start to end is:'),box[:]; #item start to end is: ['a', 'b', 'c', 'd', 'e', 'f', 'g'] #--------------对字符串操作--------------------------------------------------------- s='abcdefghijklmn'; print('s.len:%s')%len(s); #s.len:14 print('S:%s')%s; #S:abcdefghijklmn print('s:'),s[1:3]; #s: bc print('s:'),s[4:]; #s: efghijklmn print('s:'),s[6:-2]; #s: ghijkl print('s:'),s[:-11]; #s: abc #-----------切片中的步长[start:end:step],就是切片中的第三个参数step----------------------------------------------------- print s[1:8:2]; #bdfh 由索引为1开始,索引为8结束,步长为2 print s[1:8:3]; #beh '''step 默认为1,可以为负,但不可以为0 step>0 从左向右排列,start必须小于end才有结果; step<0 从右向左排列,start必须大于end才有结果; ''' print s[0:3:]; #abc print s[3:0:-1]; #dcb #-----------集合------------------------------------------------------------------------------------------------------------------ #创建set([1, 2, 3, 4]) cou = set(['usa','india','russia']); print('cou:%s')%cou; #cou:set(['india', 'russia', 'usa']) print 'china' in cou; #False cous = cou.copy(); print('cous:%s')%cous; #cous:set(['india', 'russia', 'usa']) cous.add('china'); print cous.issuperset(cou); #True 检查是否cou的每一个元素都在cous中 print cous>=cou;#True 与上一句等同 cou.remove('india'); print('cou与cous的并集:'),cous.union(cou); #cou与cous的交集: set(['russia', 'usa']) print('cou与cous的交集'),cous.intersection(cou); #cou与cous的交集 set(['russia', 'usa']) print('cous中有但是cou没有'),cous.difference(cou); #cous中有但是cou没有 set(['india', 'china']) print('cou和cous中不重复的'),cous.symmetric_difference(cou);#cou和cous中不重复的 set(['india', 'china']) ''' 也可以这样写 cous.union(cou)---cous|cou cous.intersection(cou)---cous&cou cous.difference(cou)---cous-cou cous.symmetric_difference(cou)---cous^cou ''' #----------------引用------------------------------------------------------------------------------------------------------ '''当你创建一个对象并给他赋一个变量的时候,这个变量就是引用的哪个对象,而不是表示这个 对象本身,也就是说,变量名指向你计算机中存储的那个对象的内存,这杯称为名称到对象的绑定 ''' print 'simple example'; box = ['apple','orange','banana'] mylist = box; #mylist 是同一个object的另一个名字 del box[0]; #删掉第一个item del mybox 报错 print 'box is:',box; #box is: ['orange', 'banana'] print 'mybox is:',mylist #mybox is: ['orange', 'banana'] #box 和 mylist指向同一个 object list = ['apple','orange','banana']; print 'Copy by making a full slice'; #--这里是复制list和mylist不指向同一个object mylist = list[:]; del mylist[0]; print 'list is:',list; #list is: ['apple', 'orange', 'banana'] print 'mylist is:',mylist; #mylist is: ['orange', 'banana'] '''所以如果想要复制一个列表或者类似的序列,必须使用切片来拷贝,如果使用另一个变量名 两个变量名都引用同一个对象,会造成麻烦。 总结:列表的赋值语句不等于创建拷贝,要使用切片操作符来建立序列的拷贝 ''' #--------一些字符串补充---------------------------------------------------------------------------------- name = 'Moonsky'; #这是一个string object if name.startswith('Mo'): print 'yes,the string starts with \'Mo\''; if 's' in name: print 'yes,it contains the string\'s\''; if name.find('oo')!=-1: print 'yes,it contains the string "oo"'; #如果不返回-1,表示字符串里包含oo country = ['china','us','uk']; delimiter = '-**-'; print(delimiter.join(country)); #str类的一个作为分隔符的字符串序列的项目整洁的方法,返回字符串 ''' 输出 yes,the string starts with 'Mo' yes,it contains the string's' yes,it contains the string "oo" china-**-us-**-uk '''以上是关于字典,序列,集合,引用的主要内容,如果未能解决你的问题,请参考以下文章