确定Python中字符串中的单词列表是否有序?

确定Python中字符串中的单词列表是否有序?,python,nlp,Python,Nlp,我想编写一个python函数来确定字符串中是否存在按顺序排列的单词列表。如果没有,则返回该字符串中按顺序排列的最长单词列表 例如,让我们假设我有这样一句话:那个男孩在街上遛他的大狗。我有一个单词列表[boy,was,his,dog,street,The,down]。很明显,在这个例子中,男孩,was和狗,street,down都在句子中连续出现。因此,我的函数应该按出现的顺序返回这些单词,因此:男孩是和狗在街上 有没有人知道如何有效地做到这一点 谢谢 根据评论编辑: 您只需要按顺序返回字符串中出

我想编写一个python函数来确定字符串中是否存在按顺序排列的单词列表。如果没有,则返回该字符串中按顺序排列的最长单词列表

例如,让我们假设我有这样一句话:
那个男孩在街上遛他的大狗。
我有一个单词列表
[boy,was,his,dog,street,The,down]
。很明显,在这个例子中,
男孩,was
狗,street,down
都在句子中连续出现。因此,我的函数应该按出现的顺序返回这些单词,因此:
男孩是
狗在街上

有没有人知道如何有效地做到这一点

谢谢

根据评论编辑:
您只需要按顺序返回字符串中出现的单词集,这些单词集也在列表中。当然,它们应该尽可能长。这就是为什么在示例中,我返回了
dog down the street
,因为所有这些单词都在我的列表中,并且在字符串中彼此相邻出现。

我想出了如何做:

def order(sentence, wordList):
    s_list = sentence(' .', '').replace('. ', '').replace('.', '').split(' ')

    returnSentence = ""
    returnSentenceLen = 0
    previousPos = 0
    currentSentence = []
    # iterate through all the words in the matched list and find the ones that are together
    for i, word in enumerate(s_list):
        # this word is in our list of words
        if word in wordList:
            currentSentence.append(word)
            if i == 0:
                previousPos = 0
            else:
                if (i - previousPos) == 1:
                    # this should now be our new sentence of continuous words
                    if (len(currentSentence) > returnSentenceLen):
                        returnSentence = ' '.join(word for word in currentSentence)
                        returnSentenceLen = len(currentSentence)
                else:
                    currentSentence = []
                    currentSentence.append(word)
                previousPos = i
    return returnSentence

print(order('The boy was walking his dog down the street.', ['boy', 'was', 'dog', 'street', 'the', 'down']))

你的问题陈述没有明确说明;例如,在某些情况下,不清楚应该返回几个候选解决方案中的哪一个。我们需要一个精确的问题说明。@user2357112您只需要按顺序返回字符串中出现的单词集,这些单词集也在列表中。当然,它们应该尽可能长。这就是为什么在示例中,我返回了
dog down the street
,因为所有这些单词都在我的列表中,并且在字符串中彼此相邻。这仍然非常模糊。例如,如果句子是“我爱情歌”,而列表是
[“歌曲”,“爱”,“我”]
,我们会得到“我爱”吗?“情歌”?还有别的吗?在匹配单词时,我们可以执行多少重新排列?如果句子是“我吃了一个苹果。”而列表是
[“吃”、“土豆”、“足球”、“苹果”、“安”、“猩猩”、“我”]
,那么我们是否可以输出
我吃了一个苹果
,即使列表中的单词之间有一大堆其他单词?我不太挑剔重复单词,所以两者都可以。在第二种情况下,可以忽略其他单词。