我有一个存储定义的关键字的列表,例如:
keywords = [
"white shark",
"tiger shark",
"funnel web spider",
"inland taipan"]
现在我做了一个句子
str = "A tiger shark spotted here, and a white shark, and a funnel web spider"
从这句话,我想产生一个结果["tiger shark", "white shark", "funnel web spider"]
。关键字以其在句子中的原始顺序出现在句子中。
然后,我编写了这样的代码
for i in keywords:
if not str.find(i) == -1:
result.append(i)
这将给我["white shark", "tiger shark", "funnel web spider"]
,订单与我的预期结果不同。我的错误很明显。
所以我的问题是如何获得正确的结果顺序。我认为唯一的方法是使用字符串遍历关键字列表。但是我认为它很复杂,因为它涉及许多组合。有帮助吗?非常感谢。
答案 0 :(得分:4)
这是因为您要按keywords
的顺序附加它们,相反,我们应该将其外观索引保存在my_str
中,以便以后根据它们在my_str
中的出现来对单词进行排序< / p>
keywords = [
"white shark",
"tiger shark",
"funnel web spider",
"inland taipan"]
my_str = "A tiger shark spotted here, and a white shark, and a funnel web spider"
result = []
for keyword in keywords:
idx = my_str.find(keyword)
if idx != -1:
result.append((idx, keyword))
result = [i[1] for i in sorted(result)] # Sorts by first item in tuple, idx
print(result) # -> ['tiger shark', 'white shark', 'funnel web spider']
答案 1 :(得分:1)
您可以构建(索引,关键字)列表并对其进行排序。然后从匹配的元组中提取关键字。
keywords = [
"white shark",
"tiger shark",
"funnel web spider",
"inland taipan"]
sentence = "A tiger shark spotted here, and a white shark, and a funnel web spider"
result = [ k for i,k in sorted( (sentence.find(k),k) for k in keywords) if i != -1 ]
print(result)
# ['tiger shark', 'white shark', 'funnel web spider']
您还可以使用正则表达式(形成re模块):
import re
result = re.findall("|".join(keywords),sentence)