Python,按出现顺序输出字符串中列表中的所有单词

Python,按出现顺序输出字符串中列表中的所有单词,python,python-3.x,Python,Python 3.x,该函数将我要返回的单词列表(如果它们出现在字符串中)作为一个以“”分隔的字符串。但是,现在它们将按照传递给函数的列表中的出现顺序返回。如何修改函数,使其按字符串中的出现顺序返回 我发现的唯一一篇类似的帖子是这篇,它返回了python 2.x中的第一个单词及其名称: 你可以用一个表情来表达 def fn(s, input_list): return list(x for x in s.split() if x in input_list) 其工作原理是首先将字符串s放入一个列表,然后

该函数将我要返回的单词列表(如果它们出现在字符串中)作为一个以“”分隔的字符串。但是,现在它们将按照传递给函数的列表中的出现顺序返回。如何修改函数,使其按字符串中的出现顺序返回

我发现的唯一一篇类似的帖子是这篇,它返回了python 2.x中的第一个单词及其名称:


你可以用一个表情来表达

def fn(s, input_list):
    return list(x for x in s.split() if x in input_list)

其工作原理是首先将字符串
s
放入一个列表,然后对其进行迭代,找到
input\u列表中的所有成员

>>> fn("one two three", ["three", "two", "missing"])
['two', 'three']
对于小字符串,这应该是完全合理的

如果要创建新字符串,可以使用
“”.join()“

如果始终希望返回新字符串,则可以直接返回联接值,而不是创建新列表

def fn(s, input_list):
    return " ".join(x for x in s.split() if x in input_list)
这里有一个快速而肮脏(暴力)的解决方案

假设您有一个以下排序的字符串要比较,因为您提到分隔符(或分隔符)是“”

>>s=“此处是一些单词在某些订单中”

现在假设您有一个列表
l
,您要与
s
和文档进行比较的单词

>>l=['string'、'the'、'in'、'present'、'words'、'this'、'do']

然后,您可以初始化一个新列表,
newlist
,以将
l
中的单词按照它们在
s
中出现的相同顺序记录下来

>>newlist=[]

然后,您可以为排序的每个in循环编写一个:

>>> for length in range(len(s)):
...     for word in l:
...             if word in s[:length+1] and word not in newlist:
...                     newlist.append(word)
经评估,您将获得:

>>> newlist
['words', 'in', 'string']

按照它们在
s

中出现的顺序,谢谢,效果很好。现在,如果一个单词在字符串中出现两次,我想捕获两次,该怎么办?我想我需要编辑我的字符串,以便在某个时候删除捕获的单词,对吗?有什么建议吗?
def fn(s, input_list):
    return " ".join(x for x in s.split() if x in input_list)
>>> for length in range(len(s)):
...     for word in l:
...             if word in s[:length+1] and word not in newlist:
...                     newlist.append(word)
>>> newlist
['words', 'in', 'string']