元組類型比較也是用這種算法.最后我們以這種算法的關(guān)鍵點(diǎn)作為本節(jié)的
結(jié)束:
1. 對(duì)兩個(gè)列表的元素進(jìn)行比較.
2. 如果比較的元素是同類型的,則比較其值,返回結(jié)果.
3. 如果兩個(gè)元素不是同一種類型,則檢查它們是否是數(shù)字.
a. 如果是數(shù)字,執(zhí)行必要的數(shù)字強(qiáng)制類型轉(zhuǎn)換,然后比較.
b. 如果有一方的元素是數(shù)字,則另一方的元素"大"(數(shù)字是"最小的")
c. 否則,通過類型名字的字母順序進(jìn)行比較.
4. 如果有一個(gè)列表首先到達(dá)末尾,則另一個(gè)長一點(diǎn)的列表"大".
5. 如果我們用盡了兩個(gè)列表的元素而且所有元素都是相等的,那么結(jié)果就是個(gè)平局,就
是說返回一個(gè) 0.
len()? ? >>> len(num_list)=4
排序
sorted() and reversed()
>>> s = ['They', 'stamp', 'them', 'when', "they're", 'small']
>>> for t in reversed(s):
...? print t,
...
small they're when them stamp They
>>> sorted(s)
['They', 'small', 'stamp', 'them', "they're", 'when']
初學(xué)者使用字符串扎附, 應(yīng)該注意是如何把單引號(hào)和雙引號(hào)的使用矛盾和諧掉.同時(shí)還要注意字
符串排序使用的是字典序,而不是字母序(字母'T'的 ASCII 碼值要比字母'a'的還要靠前)
enumerate() and zip()
>>> albums = ['tales', 'robot', 'pyramid']
>>> for i, album in enumerate(albums):
... print i, album
...
0 tales
1 robot
2 pyramid
>>>
>>> fn = ['ian', 'stuart', 'david']
>>> ln = ['bairnson', 'elliott', 'paton']
>>>
>>> for i, j in zip(fn, ln):
... print ('%s %s' % (i,j)).title()
...
Ian Bairnson Stuart Elliott David Paton
sum()
>>> a = [6, 4, 5]
>>> reduce(operator.add, a)
15
>>> sum(a)
15
>>> sum(a, 5)
20
>>> a = [6., 4., 5.]
>>> sum(a)
15.0
列表和元組間的轉(zhuǎn)換函數(shù)
>>> aList = ['tao', 93, 99, 'time']
>>> aTuple = tuple(aList)
>>> aList, aTuple
(['tao', 93, 99, 'time'], ('tao', 93, 99, 'time'))
>>> aList == aTuple
False
>>> anotherList = list(aTuple)
>>> aList == anotherList
True
>>> aList is anotherList
False
>>> [id(x) for x in aList, aTuple, anotherList]
[10903800, 11794448, 11721544]
正如我們?cè)诒菊碌拈_頭所討論的,無論 list()還是 tuple()都不可能做完全的轉(zhuǎn)換(見
6.1.2 節(jié)).也就是說,你傳給 tuple()的一個(gè)列表對(duì)象不可能變成一個(gè)元組,而你傳給 list()的
對(duì)象也不可能真正的變成一個(gè)列表.雖然前后兩個(gè)對(duì)象(原來的和新的對(duì)象)有著相同的數(shù)據(jù)集
合(所以相等 == ),但是變量指向的卻不是同一個(gè)對(duì)象了(所以執(zhí)行 is 操作會(huì)返回 false).還
要注意,即使它們的所有的值都相同,一個(gè)列表也不可能"等于"一個(gè)元組.
面向?qū)ο蟮牧斜砗瘮?shù)用法
表 6.11 列表類型內(nèi)建函數(shù)
List Method Operation
list.append(obj)? 向列表中添加一個(gè)對(duì)象 obj
list.count(obj) 返回一個(gè)對(duì)象 obj 在列表中出現(xiàn)的次數(shù)
list.extend(seq)
a? 把序列 seq 的內(nèi)容添加到列表中
list.index(obj, i=0,
j=len(list))? 返回 list[k] == obj 的 k 值,并且 k 的范圍在 i<=k
reverse=False)
b 以指定的方式排序列表中的成員,如果 func 和 key 參數(shù)指定,
則按照指定的方式比較各個(gè)元素,如果 reverse 標(biāo)志被置為
True,則列表以反序排列.
a.? Python1.5.2 加入的特性.
b.? key 和 reverse 特性在 Python2.4 中新添.
>>> music_media = [45]
>>> music_media
[45]
>>>
>>> music_media.insert(0, 'compact disc')
>>> music_media
['compact disc', 45]
>>>
>>> music_media.append('long playing record')
>>> music_media
['compact disc', 45, 'long playing record']
>>>
>>> music_media.insert(2, '8-track tape')
>>> music_media
['compact disc', 45, '8-track tape', 'long playing record']
在前面的例子中,我們用一個(gè)元素初始化了一個(gè)列表,然后當(dāng)向列表插入元素胯舷,或在尾部追
加新的元素后,都會(huì)去檢查這個(gè)列表.現(xiàn)在確認(rèn)一下一個(gè)值是否在我們的列表中,并看看如何找
出元素在列表中的索引值.我們用 in 操作符和 index()方法實(shí)現(xiàn)這兩個(gè)需求.
>>> 'cassette' in music_media
False
>>> 'compact disc' in music_media
True
>>> music_media.index(45)
1
>>> music_media.index('8-track tape')
理解 ?變成短句子 ?復(fù)述 ?講解 ?鉤子 ?邏輯
元組
創(chuàng)建一個(gè)元組并給他賦值實(shí)際上跟創(chuàng)建一個(gè)列表并給它賦值完全一樣,除了一點(diǎn),只有一個(gè)
元素的元組需要在元組分割符里面加一個(gè)逗號(hào)(,)用以防止跟普通的分組操作符混淆.不要忘了
它是一個(gè)工廠方法!
>>> aTuple = (123, 'abc', 4.56, ['inner', 'tuple'], 7-9j)
>>> anotherTuple = (None, 'something to see here')
>>> print aTuple
(123, 'abc', 4.56, ['inner', 'tuple'], (7-9j))
>>> print anotherTuple
(None, 'something to see here')
>>> emptiestPossibleTuple = (None,)
>>> print emptiestPossibleTuple
(None,)
>>> tuple('bar')
('b', 'a', 'r')
如何訪問元組中的值
元組的切片操作跟列表一樣,用方括號(hào)作為切片操符([]),里面寫上索引值或者索引范圍.
>>> aTuple[1:4]
('abc', 4.56, ['inner', 'tuple'])
>>> aTuple[:3]
(123, 'abc', 4.56)
>>> aTuple[3][1]
'tuple'
淺拷貝只是拷貝了一個(gè)對(duì)象的指針件炉,比如說 a=10? b=a? c=a,如果是淺拷貝市殷,當(dāng)b中引用的a改變時(shí)愕撰,c中的也會(huì)改變,深拷貝則不會(huì)醋寝,核心模塊: copy?
我們剛才描述的淺拷貝和深拷貝操作都可以在 copy 模塊中找到.其實(shí) copy 模塊中只有兩
個(gè)函數(shù)可用:copy()進(jìn)行淺拷貝操作,而 deepcopy()進(jìn)行深拷貝操作.