检查字符串是否包含列表中字符串的最快方法

Kri*_*fer 7 python list

搜索一个字符串是否包含基于列表的另一个字符串的最快方法是什么?

这个很好用,但是当字符串很大且列表很长时,对于我来说太慢了。

test_string = "Hello! This is a test. I love to eat apples."

fruits = ['apples', 'oranges', 'bananas'] 

for fruit in fruits:
    if fruit in test_string:
        print(fruit+" contains in the string")
Run Code Online (Sandbox Code Playgroud)

yat*_*atu 8

为此,我建议首先用标记该字符串,RegexpTokenizer以删除所有特殊字符,然后使用它sets来找到交集:

from nltk.tokenize import RegexpTokenizer
test_string = "Hello! This is a test. I love to eat apples."

tokenizer = RegexpTokenizer(r'\w+')
test_set = set(tokenizer.tokenize(test_string))
# {'Hello', 'I', 'This', 'a', 'apples', 'eat', 'is', 'love', 'test', 'to'}
Run Code Online (Sandbox Code Playgroud)

在标记了字符串并构造了一个集合之后,找到了set.intersection

set(['apples', 'oranges', 'bananas']) & test_set
# {'apples'}
Run Code Online (Sandbox Code Playgroud)

  • 我不会说这那么简单,特别是在优化性能方面。OP此处的性能存在问题,与使用“ n”次(“ n”是“ fruits”的长度)对原始字符串的成员资格进行检查相比,使用集合来计算交集将是更好的选择。其次是标点符号的复杂性,在拆分成单独的单词以构成一个集合的情况下必须解决。对于此类问题,请随时发布性能更好的答案@Tushortz (2认同)