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)
在一个模式字符串中,点(.)匹配除了换行外的任何字符。通过在 *
或者 +
这样的操作符后面添加一个 ?
可以强制匹配算法改成寻找最短的可能匹配。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341