python3 cookbook

发布时间:2019-09-27 07:10:47编辑:auto阅读(1949)

    使用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)

    在一个模式字符串中,点(.)匹配除了换行外的任何字符。通过在 * 或者 + 这样的操作符后面添加一个 ? 可以强制匹配算法改成寻找最短的可能匹配。

关键字

上一篇: linux安装python3

下一篇: Python3 文件操作