我想使用类似于^{
列表的索引更加灵活,因为可以将索引与其他数据结构(与匹配的字符串相关)相关联。在
例如,代替:
>>> words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']
>>> difflib.get_close_matches('Hello', words)
['hello', 'hallo', 'Hallo']
我想:
^{pr2}$似乎不存在一个参数来获得这个结果,有没有一个可以替代difflib.get_close_matches()
返回索引的方法?在
我知道我可以使用difflib.SequenceMatcher
,然后将字符串与ratio
(或quick_ratio
)进行一对一的比较。但是,我担心这样做会很低效:
我必须创建数千个SequenceMatcher对象并对它们进行比较(我希望get_close_matches
避免使用该类):
编辑:错误。我检查了source code of ^{SequenceMatcher
。
没有截止(我猜有一个优化可以避免计算所有字符串的比率)
编辑:部分错误。代码是get_close_matches
没有任何主要的优化,除了使用^{set_seq1
,set_seq2
,所以至少我不必每次都创建一个对象。
据我所知,所有python库都是C编译的,这将提高性能。在
编辑:我很确定是这样。该函数位于名为cpython的文件夹中。在
编辑:直接从difflib执行与在文件中复制the function之间有一个小差别(p值为0.030198)mydifflib.py. 在
ipdb> timeit.repeat("gcm('hello', _vals)", setup="from difflib import get_close_matches as gcm; _vals=['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']", number=100000, repeat=10)
[13.230449825001415, 13.126462900007027, 12.965455356999882, 12.955717618009658, 13.066136312991148, 12.935014379996574, 13.082025538009475, 12.943519036009093, 13.149949093989562, 12.970130036002956]
ipdb> timeit.repeat("gcm('hello', _vals)", setup="from mydifflib import get_close_matches as gcm; _vals=['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']", number=100000, repeat=10)
[13.363269686000422, 13.087718107010005, 13.112324478992377, 13.358293497993145, 13.283965317998081, 13.056695280989516, 13.021098569995956, 13.04310674899898, 13.024205000008806, 13.152750282009947]
尽管如此,它并不像我预期的那么糟糕,我想除非有人知道另一个图书馆或其他选择,否则我会继续下去。在
我获取了^{} 的源代码,并对其进行了修改,以返回索引而不是字符串值。在
使用
^{pr2}$现在,我可以将这些索引与字符串的关联数据关联起来,而不必搜索字符串。在
相关问题 更多 >
编程相关推荐