python3 cookbook

使用deque(maxlen=N)構造函數會新建一個固定大小的隊列.當新的元素加入並且這個隊列已滿的時候,最老的元素會被移除掉.在隊列兩端插入或者刪除元素時間複雜度都是O(1), 而在列表的開頭插入或刪除元素的時間複雜度爲O(N).


當要查找的元素個數相對比較小的時候,函數 nlargest() 和 nsmallest() 是很合適的。 如果你僅僅想查找唯一的最小或最大(N=1)的元素的話,那麼使用 min() 和 max() 函數會更快些。 類似的,如果N的大小和集合大小接近的時候,通常先排序這個集合然後再使用切片操作會更快點 (sorted(items)[:N] 或者是 sorted(items)[-N:] )。 需要在正確場合使用函數 nlargest() 和nsmallest() 才能發揮它們的優勢 (如果N快接近集合大小了,那麼使用排序操作會更好些)


2. 字符串和文本

re.split(r'[;,\s]\s*]', line)

re.split(r'(;|,|\s)\s*', line)     

re.split(r'(?:,|;|\s)\s*', line)

[name for name in filenames if name.endswith(('.c', '.h'))]

re.match('http:|https:|ftp:', url)  # match() 方法僅僅檢查字符串的開始部分。

from fnmatch import fnmatch, fnmatchcase

fnmatch('foo.txt', '*.txt')

如果你的代碼需要做文件名的匹配,最好使用 glob 模塊。

如果你想使用同一個模式去做多次匹配,你應該先將模式字符串預編譯爲模式對象。

datepat.findall(text)

datepat.finditer(text)

如果你打算做大量的匹配和搜索操作的話,最好先編譯正則表達式,然後再重複使用它。 模塊級別的函數會將最近編譯過的模式緩存起來,因此並不會消耗太多的性能, 但是如果使用預編譯模式的話,你將會減少查找和一些額外的處理損耗。

text.replace('yeah', 'yep')

re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)

datepat.sub(r'\3-\1-\2', text)

對於更加複雜的替換,可以傳遞一個替換回調函數來代替.一個替換回調函數的參數是一個 match 對象,也就是 match() 或者 find() 返回的對象。 使用group() 方法來提取特定的匹配部分。回調函數最後返回替換字符串。

def change_date(m):

    mon_name = month_abbr[(m.group())]
    .format(m.group(), mon_name, m.group())
(datepat.sub(change_date, text))

newtext, n = datepat.subn(r'\3-\1-\2', text)


def matchcase(word):
    def replace(m):
        text = m.group()
        if text.isupper():
            return word.upper()
        elif text.islower():
            return word.lower()
        elif text[0].isupper():
            return word.capitalize()
        else:
            return word
    return replace


re.sub('python', matchcase('snake'), text, flags=re.IGNORECASE)

在一個模式字符串中,點(.)匹配除了換行外的任何字符。通過在 * 或者 + 這樣的操作符後面添加一個 ? 可以強制匹配算法改成尋找最短的可能匹配。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章