python中怎么判断一个单词是不是回文_关于python:如何检查一个单词是另一个单词的回文...

我创建了一个python程序,用户在其中输入单词,然后该程序将单词变成一个列表。 然后,用户输入字母,然后程序会告诉您该字母出现了多少次。 现在,我需要添加更多程序以检查其开头输入的单词是回文。 如果是这样,将会有一个好消息,如果不是,那就是错误消息。 不太确定如何开始。 有什么帮助吗?

可能重复的快速和python方式来找出字符串是否是回文

您可以反转字符串并检查它是否等于输入字符串:

def palindrome(s):

return s == s[::-1]

在python中有一个已知的"技巧",使用[::-1]反转单词。虽然不是最有效的:

>>>"racecar" =="racecar"[::-1]

True

>>>"racecars" =="racecars"[::-1]

False

我知道您通常不应该使用[::-1],因为它会创建通常不需要的列表,但是为什么在这种情况下这不是最有效的?

您刚才说了为什么。您可以使用O(1)计算内存和O(n)cpu-time来实现,这样效率更高。

渐近地,您可能是对的,但是我怀疑,对于想要知道其回文的任何大小的单词,它是否比迭代器版本的额外开销大。我对all(a==b for a,b in zip(r,reversed(r)))进行了尝试(有更好的方法吗?),并且[::-1]版本要快得多。

我也认为这是单词长度的问题。我认为大的话将需要更多的内存摆弄,这就是迭代器胜出的地方。如果您使用python 2,请确保您未使用zip创建列表(使用itertools.izip)。

绝对是,在某些时候,迭代器会获胜(尤其是在否定情况下)。我的观点是,在任何涉及实际单词的情况下,它们都不会。 (以及即时通讯使用Python 3)

英语单词,甚至人类语言,都是非常具体的领域。我希望迭代器在所有情况下都能胜诉(即使有微小的差异),所以我有点惊讶。也许两个"指针"(起点,终点)的手动迭代将提供更快的结果,从而避免zip的元组。

好的,我已经查看了您所有的答案。此代码是否合适,甚至是适当的代码呢?

def getPalindrome()

if word == word[::-1] :

print(True)

else :

print(False)

palindrome = getPalindrome()

您的函数会输出布尔值,但应该返回它。

您可以使用简单的条件语句。对于初学者来说,这应该更容易理解。例如:

text ="Rapport"

def palindrome(text)

if text[::-1] == text:

return True

else:

return False

我相信这应该很容易理解。 text [::-1]是最快的方法。一种更慢的方法是使用''.join(reversed(list)),其中列表是您将文本拆分成的列表。您可以通过使用timeit对代码进行计时来验证您要采用哪种方法。

虽然,定时对代码进行切片被认为是不好的基准,所以要对整个代码进行计时。希望我解释得足够好。祝好运!

编辑:您的代码是好的,但是您需要记住,函数将参数作为值,这是您在函数本身中进行的操作。

您的最终代码应如下所示:

文字= StrVar()

def getPalindrome(word):

if word == word[::-1]:

return True

else :

return False

palindrome = getPalindrome(text)

注意,该函数的参数与文本本身不同,我为它分配了一个字符串变量以表明您不需要立即为其提供值。使您的代码优雅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值