在python中打破单词并不起作用

时间:2015-07-23 19:46:57

标签: python algorithm dynamic-programming

我有一个包含单词列表的字符串。我想获得列表中存在的所有关键字。但它不能使用超过1个关键字

ks = ['Voices', 'Home']

def find_tag(long_string, size, result):
    for idx, s in enumerate(range(0, size + 1)):
        prefix = long_string[0:idx + 1]
        if prefix in ks:
            if idx + 1 == size:
                result += prefix
                print(result)
            find_tag(long_string[idx: size - idx], size - idx, result + prefix + ' ')


find_tag('Voices', len('Voices'), '')

text = 'VoicesandHome'
find_tag(text, len(text), '')

示例输入将是'IliveinLondonandIusedtogotoNewYork'

之类的字符串

鉴于字典为['London', 'New York']

输出为LondonNew York

2 个答案:

答案 0 :(得分:0)

关于您的代码的一些评论:

for idx, s in enumerate(range(0, size + 1)):

没有多大意义,因为enumerate(range(0,k+1))会产生(0,0)(1,1),...,(k,k)(为什么在idx中具有相同的值和s

您的代码似乎是迭代的(使用for循环),但它在分支中使用递归。

通常(例如在这个简单的简单示例中),您要么使用简单的递归代码,要么使用稍微复杂的迭代代码。您的代码中出现了一些错误。

根据关键字是否重叠,我建议非常简单和pythonic:

[word for word in ks if word.replace(' ','') in text]

表示重叠关键字,或者是非重叠关键字的递归方法:

def keywords(text):
    if text == '': return []
    for k in ks:
        if text.startswith(k.replace(' ','')):
            return [k]+keywords(text[len(k):])
    return keywords(text[1:])

e.g:

>>> text='IliveinLondonandIusedtogotoNewYork'
>>> ks=['London', 'New York']
>>> keywords(text)
['London', 'New York']

>>> text='foop'
>>> ks=['foo','oop']
>>> keywords(text)
['foo']

答案 1 :(得分:0)

这是我的镜头:

ks = ['London', 'New York']
str1 = 'IliveinLondonandIusedtogotoNewYork'
result=[]
for w in ks:
 if (str1.find(w) != -1): result.append(w) 

print(len(result))
print result[1]
# How python ignore that space?