#-*- coding:utf-8 -*-
#------字典--------
'''字典类似于通过联系人名查找联系人的详细信息,即,把键(名字)和值(详细情况)联系在一起,
键必须唯一,只能使用不可变的对象如字符串来作为字典的键,但是可以把不可变或者可变对象作为
字典的值。基本说就是应该只使用
'''
#-------练习---------
email = {'张三':'123@126.com',
'李四':'456@126.com',
'王五':'789@126.com',
'二大爷':'137@126.com'
};
#下面用In来检查一个键值对是否存在,也可以用has_key
if '李四' in email:
print("李四的邮件是:"), email['李四'];
if email.has_key('李四'):
print("李四的邮件是:"), email['李四'];
#李四的邮件是: 456@126.com
print ('二大爷的邮件是:'),email['二大爷'];
#二大爷的邮件是: 137@126.com
print str(email).decode('string_escape');
#{'张三': '123@126.com', '李四': '456@126.com', '二大爷': '137@126.com', '王五': '789@126.com'}
#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 ['赵六'] = '357@qq.com';
# 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 456@126.com
contact 二大爷 at 137@126.com
contact 王五 at 789@126.com
contact 赵六 at 357@qq.com
这里使用字典的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
'''
字典,序列,集合,引用
原文:http://blog.51cto.com/11927232/2055117