如何在一个句子中找到与python中的单词甚至相反的单词

2024-09-23 04:24:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到在同一个句子中所有颠倒单词的单词。 然而,我得到的密码只找到了这个词的第一次出现。 在我的句子“我要吃ma,tae也要吃”中,我应该得到am(ma是反向词)和eat(tae是反向词)的输出。我只得到am..我如何修改此代码以获得其中所有具有反转单词的单词,即am和eat

input_str='i am going to eat ma and tae will also go'
word=input_str.split()
def isReverseEqual(s1, s2): 

    # If both the strings differ in length 
    if len(s1) != len(s2): 
        return False

    l = len(s1) 

    for i in range(l): 

        # In case of any character mismatch 
        if s1[i] != s2[l-i-1]: 
            return False
    return True
def getWord(str, n): 
    reverse=[]
    # Check every string 
    for i in range(n-1): 

        # Pair with every other string 
        # appearing after the current string 
        for j in range(i+1, n): 

            # If first string is equal to the 
            # reverse of the second string 
            if (isReverseEqual(str[i], str[j])): 
                reverse.append(str[i])
                return reverse 


    # No such string exists 
    return "-1"
print(getWord(word, len(word))) 

输出: ['am','eat']是人们所期望的


Tags: theinstringlenreturnam单词word
3条回答
input_str= 'i am going to eat ma and tae will also go'
words_list = input_str.split()
new_words_list = [word[::-1] for word in words_list]

data = []
for i in words_list:
    if len(i) > 1 and i in new_words_list:
        data.append(i)

输出:

['am', 'eat', 'ma', 'tae']

您可以使用:

words = input_str.split()

s = set()
result = set()
for w in words:
    r = w[::-1]
    if r in s:
        result.add(r)
    else:
        s.add(w)

list(result)

输出:

['am', 'eat']

这是O(n)时间复杂度的解决方案,因此您必须首先获取单词并对其进行迭代,每次您有一个新词时,您都要将其添加到一个集合中,如果集合中已经存在反向,则您要将反向添加到结果中

只需更改“return reverse”行的缩进:

input_str='i am going to eat ma and tae will also go'
word=input_str.split()
def isReverseEqual(s1, s2):

    # If both the strings differ in length
    if len(s1) != len(s2):
        return False

    l = len(s1)

    for i in range(l):

        # In case of any character mismatch
        if s1[i] != s2[l-i-1]:
            return False
    return True
def getWord(str, n):
    reverse=[]
    # Check every string
    for i in range(n-1):

        # Pair with every other string
        # appearing after the current string
        for j in range(i+1, n):

            # If first string is equal to the
            # reverse of the second string
            if (isReverseEqual(str[i], str[j])):
                reverse.append(str[i])
    if reverse:
        return reverse
    else:    # No such string exists
        return "-1"
print(getWord(word, len(word)))

相关问题 更多 >