加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在字符串列表中搜索的高效且最快的方法

发布时间:2020-12-20 11:04:26 所属栏目:Python 来源:网络整理
导读:以下函数返回列表中包含与输入单词完全相同的字符的单词数.单词中字符的顺序并不重要.但是,有一个包含数百万字的列表.执行此搜索的最有效和最快的方法是什么? 例: words_list = ['yek','lion','eky','ekky','kkey','opt']; 如果我们将单词“key”与列表中
以下函数返回列表中包含与输入单词完全相同的字符的单词数.单词中字符的顺序并不重要.但是,有一个包含数百万字的列表.执行此搜索的最有效和最快的方法是什么?

例:

words_list = ['yek','lion','eky','ekky','kkey','opt'];

如果我们将单词“key”与列表中的单词匹配,则该函数仅返回“yek”和“eky”,因为它们与“key”共享相同的完全字符,而不管顺序如何.

以下是我写的功能

def find_a4(words_list,word):
    # all possible permutations of the word that we are looking for
    # it's a set of words 
    word_permutations = set([''.join(p) for p in permutations(word)])
    word_size = len(word)
    count = 0

    for word in word_list:
        # in the case of word "key",# we only accept words that have 3 characters 
        # and they are in the word_permutations 
        if len(word) == word_size and word in word_permutations:
            count += 1

    return count

解决方法

一个字典,其键是单词的排序版本:

word_list = ['yek','opt']

from collections import defaultdict
word_index = defaultdict(set)

for word in word_list:
    idx = tuple(sorted(word))
    word_index[idx].add(word)

# word_index = {
#    ('e','k','y'): {'yek','eky'},#    ('i','l','n','o'): {'lion'},#    ('e','y'): {'kkey','ekky'},#    ('o','p','t'): {'opt'}
# }

然后查询你会做:

def find_a4(word_index,word):
    idx = tuple(sorted(word))
    return len(word_index[idx])

或者,如果您需要返回实际单词,请将其更改为返回word_index [idx].

效率:查询运行in average in O(1) time.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读