最近要回學校開始作畢設了,準備作個有關算法的,據說python運算好一些,特意來學一學。python
先從基礎開始啊…………………………算法
取一個list的部分元素是很是常見的操做。數據結構
Python提供了切片(Slice)操做符,能大大簡化這種操做。app
取前3個元素,用一行代碼就能夠完成切片:函數
L[0:3]spa
L[0:3]表示,從索引0開始取,直到索引3爲止,但不包括索引3。即索引0,1,2,正好是3個元素。code
若是第一個索引是0,還能夠省略:對象
L[:3]索引
也能夠從索引1開始,取出2個元素出來:ip
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'
集合是指包含一組元素的數據結構,咱們已經介紹的包括: 1. 有序集合:list,tuple,str和unicode; 2. 無序集合:set 3. 無序集合而且具備 key-value 對:dict
enumerate() 函數把:
['Adam', 'Lisa', 'Bart', 'Paul']
變成了相似:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
使用 enumerate() 函數,咱們能夠在for循環中同時綁定索引index和元素name。
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> for index, name in enumerate(L): ... print index, '-', name ... 0 - Adam 1 - Lisa 2 - Bart 3 - Paul
zip()函數能夠把兩個 list 變成一個 list:
>>> zip([10, 20, 30], ['A', 'B', 'C']) [(10, 'A'), (20, 'B'), (30, 'C')]
dict 對象有一個 values() 方法,這個方法把dict轉換成一個包含全部value的list
dict除了values()方法外,還有一個 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果徹底同樣
那這兩個方法有何不一樣之處呢?
1. values() 方法實際上把一個 dict 轉換成了包含 value 的list。
2. 可是 itervalues() 方法不會轉換,它會在迭代過程當中依次從 dict 中取出 value,因此 itervalues() 方法比 values() 方法節省了生成 list 所需的內存。
3. 打印 itervalues() 發現它返回一個 <dictionary-valueiterator> 對象,這說明在Python中,for 循環可做用的迭代對象遠不止 list,tuple,str,unicode,dict等,任何可迭代對象均可以做用於for循環,而內部如何迭代咱們一般並不用關心。
若是一個對象說本身可迭代,那咱們就直接用 for 循環去迭代它,可見,迭代是一種抽象的數據操做,它不對迭代對象內部的數據有任何要求。
在一個 for 循環中,如何同時迭代 key和value。
dict 對象的 items() 方法返回的值:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> print d.items() [('Lisa', 85), ('Adam', 95), ('Bart', 59)]
能夠看到,items() 方法把dict對象轉換成了包含tuple的list,咱們對這個list進行迭代,能夠同時得到key和value:
>>> for key, value in d.items(): ... print key, ':', value ... Lisa : 85 Adam : 95 Bart : 59
和 values() 有一個 itervalues() 相似, items() 也有一個對應的 iteritems(),iteritems() 不把dict轉換成list,而是在迭代過程當中不斷給出 tuple,因此, iteritems() 不佔用額外的內存。
d.ieteritems()
>>> L = [] >>> for x in range(1, 11): ... L.append(x * x) [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
可是循環太繁瑣,而列表生成式則能夠用一行語句代替循環生成上面的list:
>>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
字符串能夠經過 % 進行格式化,用指定的參數替代 %s。字符串的join()方法能夠把一個 list 拼接成一個字符串。
若是咱們只想要偶數的平方,不改動 range()的狀況下,能夠加上 if 來篩選:
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100]
有了 if 條件,只有 if 判斷爲 True 的時候,才把循環的當前元素添加到列表中。
isinstance(x, str) 能夠判斷變量 x 是不是字符串
字符串的 upper() 方法能夠返回大寫的字母
在列表生成式中,也能夠用多層 for 循環來生成列表。