通常的字符串組合操做都建議使用join
, 字符串操做常用的就join
, split
, replace
, 另外還有partition
join
裏面能夠寫成一個列表解析的形式python
m = map(str, range(9)) ','.join(x for x in m if x != '3') # 而不是 ','.join([x for x in m if x != '3'])
用list.remove
是不行的, 只能刪除從左到右找到的第一個元素, 後面的不會刪除
自認爲兩種比較好的方式以下git
m = ['a', 'b', 'c', 'a'] m = filter(lambda x: x !='a', m)
或者bash
m[:] = (x for x in m if x != 'a')
import random import string rand_str = "".join([random.choice(string.letters+string.digits) for _ in xrange(n)])
函數默認參數,只在定義時參數求值了一次,函數的多個調用將使用同一個可變參數app
def test(data, x=[]): x.append(data) return x print test(3) # [3] print test(4) # [3, 4]
和函數參數問題同樣,多個鍵值對應的value
將調用同一個列表。設置爲{}
天然也是同樣的結果dom
>>> a = dict.fromkeys('bc', []) >>> a['b'].append(6) >>> a {'b': [6], 'c': [6]}
通常會有聲明多個空list
和空dict
的需求
將致使多個變量共享同一個[]
或{}
的錯誤的作法函數
a = b = [] c = d = {}
正確的方式code
a, b = [], [] # for a lot of var c, d, e, f = [{} for _ in xrange(4)]
其它int
, str
, bool
等沒有此問題,可直接寫成對象
a = b = True
del
的時候一次能夠刪除多個索引
>>> a = range(3) >>> del a[2], a[0] >>> a [1]
能夠用-1來反轉列表ip
>>> a = range(7) >>> a[::-1] [6, 5, 4, 3, 2, 1, 0] >>> a[::2] [0, 2, 4, 6]
用切片刪除某一段序列,等同於del a[1:4]
>>> a = [1, 2, 3, 4, 5, 6, 7] >>> a[1:4] = [] >>> a [1, 5, 6, 7]
去除偶數索引
>>> a = [0, 1, 2, 3, 4, 5, 6, 7] >>> del a[::2] >>> a [1, 3, 5, 7]
主要用於多維矩陣中,減小定位操做時的複雜度,用得很少,更仔細的說明見這裏
>>> class C(object): ... def __getitem__(self, item): ... return item ... >>> C()[1:2, ..., 3] (slice(1, 2, None), Ellipsis, 3)
使用二進制模式,如rb
模式, 使用r
則只能讀取到一部分
with open(path, 'rb') as f: return f.read()
將文件對象看錯iterator
with open(path, 'r') as f: for line in f: print line