python數據類型
整數、浮點數(1.23x10^9就是1.23e9)、字符串、布爾值(True、False)、空值(None)
注釋
用#表示
raw字符串
在字符串前面加個前綴 r ,表示這是一個 raw 字符串,里面的字符就不需要轉義了
r'''python's
best
language'''
字符串連接用+連接或者用().join() 或者逗號,來連接
list類型
L.append('item') append()總是把新的元素添加到 list 的尾部
L.insert(2,'item') insert()方法,它接受兩個參數,第一個參數是索引號,第二個參數是待添加的新元素
L.pop() pop()方法總是刪掉list的最后一個元素,并且它還返回這個元素
L.pop(4) pop()按索引刪除
替換元素的話直接賦值即可
tuple類型
創(chuàng)建tuple和創(chuàng)建list唯一不同之處是用( )替代了[ ]
t = ('Adam', 'Lisa', 'Bart')
t[-1] 利用索引訪問數據,但是不能賦值
單元素 tuple 要多加一個逗號“,”,這樣就避免和括號歧義如:t = (1,)
dict類型
花括號 {} 表示這是一個dict,內容按照 key: value形式
d[key] 的形式來查找對應的 value
判斷key是否存在d.get(key)來判斷,沒有則返回None
d.values()獲取所有value的list
d.itervalues()方法和values()方法迭代效果完全一樣
那這兩個方法有何不同之處呢?
- values() 方法實際上把一個 dict 轉換成了包含 value 的list。
- 但是 itervalues() 方法不會轉換,它會在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節(jié)省了生成 list 所需的內存。
- 打印 itervalues() 發(fā)現(xiàn)它返回一個 <dictionary-valueiterator> 對象,這說明在Python中,for 循環(huán)可作用的迭代對象遠不止 list,tuple,str,unicode,dict等,任何可迭代對象都可以作用于for循環(huán),而內部如何迭代我們通常并不用關心。
d.items()方法把dict對象轉換成了包含tuple的list
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
>>> for key, value in d.items():
... print key, ':', value
...
Lisa : 85
Adam : 95
Bart : 59
和 values() 有一個 itervalues() 類似, items() 也有一個對應的 iteritems(),iteritems() 不把dict轉換成list,而是在迭代過程中不斷給出 tuple,所以, iteritems() 不占用額外的內存
set類型
dict的作用是建立一組 key 和一組 value 的映射關系,dict的key是不能重復的。
set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重復,而且是無序的,這點和 dict 的 key很像。
創(chuàng)建 set 的方式是調用 set() 并傳入一個 list,list的元素將作為set的元素
s = set(['A', 'B', 'C'])
'item' in s 返回true或者false
s.add('D') 一是把新的元素添加到set中
s.remove('D') 二是把已有元素從set中刪除
切片
L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3。即索引0,1,2,正好是3個元素。
>>> L[:3]
['Adam', 'Lisa', 'Bart']
也可以從索引1開始,取出2個元素出來:
>>> L[1:3]
['Lisa', 'Bart']
只用一個 : ,表示從頭到尾:
>>> L[:]
['Adam', 'Lisa', 'Bart', 'Paul']
L[:]實際上復制出了一個新list。
>>> L[::2]
['Adam', 'Bart']
第三個參數表示每N個取一個,上面的 L[::2] 會每兩個元素取出一個來,也就是隔一個取一個。
倒序切片
倒數第一個元素為L[-1],倒序切片包含起始索引,不包含結束索引
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> L[-2:]
['Bart', 'Paul']
>>> L[:-2]
['Adam', 'Lisa']
>>> L[-3:-1]
['Lisa', 'Bart']
>>> L[-4:-1:2]
['Adam', 'Bart']
迭代
python中,迭代永遠是取出元素本身,而非元素的索引
對于有序集合,元素確實有索引,有時候想拿到索引
enumerate()函數
['Adam', 'Lisa', 'Bart', 'Paul']
變成了類似:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
enumerate() 函數自動把每個元素變成 (index, element) 這樣的tuple,再迭代,就同時獲得了索引和元素本身。
zip()函數可以把兩個 list 變成一個 list:
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
isinstance(x, str) 可以判斷變量 x 是否是字符串
匿名函數lambda x: x * x實際上就是:
def f(x):
return x * x
關鍵字lambda表示匿名函數,冒號前面的x表示函數參數。