我想使用类似difflib.get_close_matches但不是最相似的字符串,我想获取索引(即列表中的位置)。
列表的索引更加灵活,因为可以将索引与其他数据结构(与匹配的字符串相关)相关联。
例如,而不是:
>>> words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']
>>> difflib.get_close_matches('Hello', words)
['hello', 'hallo', 'Hallo']
Run Code Online (Sandbox Code Playgroud)
我想:
>>> difflib.get_close_matches('Hello', words)
[0, 1, 6]
Run Code Online (Sandbox Code Playgroud)
似乎不存在获取此结果的参数,是否有替代方法可以difflib.get_close_matches()返回索引?
我知道我可以使用difflib.SequenceMatcher, 然后将字符串与ratio(或quick_ratio)进行一对一比较。但是,我担心这会非常低效,因为:
我将不得不创建数千个 SequenceMatcher 对象并比较它们(我希望get_close_matches避免使用该类):
编辑:错误。我检查了 的源代码get_close_matches,它实际上使用SequenceMatcher.
没有截止(我猜有一种优化可以避免计算所有字符串的比率)
编辑:部分错误。该代码是get_close_matches没有任何重大的优化,除了它使用real_quick_ratio,quick_ratio而ratio产品总数。无论如何,我可以轻松地将优化复制到我自己的函数中。我也没有考虑到 SequenceMatcher 有设置序列的方法:set_seq1, set_seq2,所以至少我不必每次都创建一个对象。
据我了解,所有 python 库都是 C 编译的,这会提高性能。 …