如何在一个句子中找到与python中的单词甚至相反的单词
我想找到在同一个句子中所有颠倒单词的单词。 然而,我得到的密码只找到了这个词的第一次出现。 在我的句子中,我要吃ma,tae也要吃,我应该得到一个输出,am-ma是反义词,eat-tae是反义词。我只得到am..我如何修改此代码以获得其中所有具有反转单词的单词,即am和eat如何在一个句子中找到与python中的单词甚至相反的单词,python,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):
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']是人们所期望的 您可以使用:
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']
这是一个时间复杂度的解决方案,所以你必须首先得到单词并迭代它们,每次你有一个新词,你就把它添加到一个集合中,如果这个集合中已经有了相反的词,你就把相反的词添加到结果中
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)
输出:
只需更改行返回反转的缩进:
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)))
您的解决方案过于复杂。例如,函数isReverseEqual可以写在一行中:
def isReverseEqual(s1, s2):
return s1==s2[::-1]
让我们简化一下。首先,将句子视为一个集合,而不是一个列表,因为集合查找更有效:
words = set(input_str.split())
接下来,如果单词的反向副本也在集合/列表中,并且它们的字母顺序比反向副本小,则从集合/列表中选择单词,以避免重复:
[w for w in words if w[::-1] in words and w < w[::-1]]
#['am', 'eat']
此解决方案也适用于列表。在我看来,从技术上讲,此活动无法100%正确完成。如果你输入单词deal,但你真的想要单词lead,会发生什么?你期待的是['am','eat',],而不是['ma','tea',,因为am和eat出现在句子的第一位?或者它与预期输出的顺序无关?
[w for w in words if w[::-1] in words and w < w[::-1]]
#['am', 'eat']