我有一个包含单词列表的字符串。我想获得列表中存在的所有关键字。但它不能使用超过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']
输出为London
和New York
答案 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?