发布时间: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 文件操作
47750
46245
37132
34635
29231
25893
24762
19866
19426
17916
5720°
6322°
5841°
5891°
6991°
5830°
5850°
6364°
6318°
7682°