最近要回學校開始做畢設了,準備做個有關演算法的,聽說python運算好一些,特地來學一學。取乙個list的部分元素是非常常見的操作。先從基礎開始啊…………………………
python提供了切片(slice)操作符,能大大簡化這種操作。
取前3個元素,用一行**就可以完成切片:
l[0:3]
l[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素。
如果第乙個索引是0,還可以省略:
l[:3]
也可以從索引1開始,取出2個元素出來:
l[1:3]
只用乙個 : ,表示從頭到尾:
l[:]
因此,l[:]實際上複製出了乙個新list。
切片操作還可以指定第三個引數:
l[::2]
第三個引數表示每n個取乙個,上面的 l[::2] 會每兩個元素取出乙個來,也就是隔乙個取乙個。
tuple同上。
l[-1]是最後乙個元素,用此做倒序切片。
倒序切片包含起始索引,不包含結束索引。
利用倒序切片對 1 - 100 的數列取出:
* 最後10個數;
* 最後10個5的倍數。
l = range(1, 101)
print l[-10:]
print l[4::5][-10:]
字元切片
>>> 'abcdefg'[:3]'abc'
集合是指包含一組元素的資料結構,我們已經介紹的包括:enumerate() 函式把:1. 有序集合:list,tuple,str和unicode;
2. 無序集合:set
3. 無序集合並且具有 key-value 對:dict
['adam', 'lisa', 'bart', 'paul']變成了類似:
[(0, 'adam'), (1, 'lisa'), (2, 'bart'), (3, 'paul')]使用 enumerate() 函式,我們可以在for迴圈中同時繫結索引index和元素name。
>>> l = ['adam', 'lisa', 'bart', 'paul']zip()函式可以把兩個 list 變成乙個 list:>>> for index, name in enumerate(l):
... print index, '-', name
...
0 - adam
1 - lisa
2 - bart
3 - paul
>>> zip([10, 20, 30], ['a', 'b', 'c'])dict 物件有乙個 values() 方法,這個方法把dict轉換成乙個包含所有value的list[(10, 'a'), (20, 'b'), (30, 'c')]
dict除了values()方法外,還有乙個 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一樣
那這兩個方法有何不同之處呢?
1. values() 方法實際上把乙個 dict 轉換成了包含 value 的list。
2. 但是 itervalues() 方法不會轉換,它會在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節省了生成 list 所需的記憶體。
3. 列印 itervalues() 發現它返回乙個 物件,這說明在python中,for 迴圈可作用的迭代物件遠不止 list,tuple,str,unicode,dict等,任何可迭代物件都可以作用於for迴圈,而內部如何迭代我們通常並不用關心。
如果乙個物件說自己可迭代,那我們就直接用 for 迴圈去迭代它,可見,迭代是一種抽象的資料操作,它不對迭代物件內部的資料有任何要求。
在乙個 for 迴圈中,如何同時迭代 key和value。
dict 物件的 items() 方法返回的值:
>>> d =可以看到,items() 方法把dict物件轉換成了包含tuple的list,我們對這個list進行迭代,可以同時獲得key和value:>>> print d.items()
[('lisa', 85), ('adam', 95), ('bart', 59)]
>>> for key, value in d.items():和 values() 有乙個 itervalues() 類似, items() 也有乙個對應的 iteritems(),iteritems() 不把dict轉換成list,而是在迭代過程中不斷給出 tuple,所以, iteritems() 不占用額外的記憶體。... print key, ':', value
...
lisa : 85
adam : 95
bart : 59
d.ieteritems()
>>> l =但是迴圈太繁瑣,而列表生成式則可以用一行語句代替迴圈生成上面的list:>>> for x in range(1, 11):
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [x * x for x in range(1, 11)]如果我們只想要偶數的平方,不改動 range()的情況下,可以加上 if 來篩選:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
字串可以通過 % 進行格式化,用指定的引數替代 %s。字串的join()方法可以把乙個 list 拼接成乙個字串。
>>> [x * x for x in range(1, 11) if x % 2 == 0]有了 if 條件,只有 if 判斷為 true 的時候,才把迴圈的當前元素新增到列表中。[4, 16, 36, 64, 100]
isinstance(x, str) 可以判斷變數 x 是否是字串
字串的 upper() 方法可以返回大寫的字母
在列表生成式中,也可以用多層 for 迴圈來生成列表。
GIS可以做什麼
gis簡介 gis可以做什麼?進行地理資訊查詢和分析 gis搜尋資料庫並進行地理資訊查詢的能力,節約了許多公司數以百萬計的金錢。gis可以 房地產經紀人可以用gis在一定的區域內尋找滿足下列條件的所有房屋 瓦蓋的屋頂 五個房間,並可列出它們的所有特點 查詢可以通過增加準則來進一步細化 可以列出這些房...
GIS可以做什麼?
進行地理資訊查詢和分析 gis搜尋資料庫並進行地理資訊查詢的能力,節約了許多公司數以百萬計的美元。gis可以 房地產經紀人可以用gis在一定的區域內尋找滿足下列條件的所有房屋 瓦蓋的屋頂 五個房間,並可列出它們的所有特點。查詢可以通過增加準則來進一步細化 房價必須每平方英呎少於100美元。還可以列出...
T SQL可以做什麼
t sql是與sql server交流的語言,而查詢表示式主要用來告訴伺服器該做什麼。一定要知道可以要求sql server做什麼和sql server能做什麼。查詢操作可分為三類,下面簡要描述它們,然後講解幾個例子。和技術世界裡的所有事物一樣,這些類別用三字母縮寫詞 three letter ab...