字典,序列,集合,引用
阿新 • • 發佈:2017-12-27
字典序列集合引用#-*- 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
'''
字典,序列,集合,引用