Python3.x:使用endswith()查找子字符串是否位于字符串的末尾
我创建了一个程序来检查一个字符串是否是另一个字符串的子字符串,附加的条件是该子字符串位于末尾Python3.x:使用endswith()查找子字符串是否位于字符串的末尾,python,string,Python,String,我创建了一个程序来检查一个字符串是否是另一个字符串的子字符串,附加的条件是该子字符串位于末尾 def atEnd(first, second): if second in first and first.endswith(second): return True else: return False first, second = input('Enter two strings: ').split() print(atEnd(first, sec
def atEnd(first, second):
if second in first and first.endswith(second):
return True
else:
return False
first, second = input('Enter two strings: ').split()
print(atEnd(first, second))
有没有一种方法可以在不使用.endswith()函数的情况下找到相同的结果
我会做好的
将完成此工作。您的
atEnd
功能与str.endswith
完全冗余,这是一种内置的本机方法,因此将具有高效的实现
我只需编写print(first.endswith(second))
——无需进一步复杂化
如果出于某种原因,您确实想要一个自由函数而不是一个方法,那么您可以直接调用str.endswith
:print(str.endswith(first,second))
如果出于效率考虑,您想编写自己的实现,那么最好使用另一种算法(例如,构建后缀树)。如果您想编写自己的实现来理解低级字符串操作,您真的应该学习C语言并阅读。如果你这样做是因为学校作业告诉你不要使用
endswith
,那么这对我来说似乎是一个愚蠢的作业——你可能应该向你的老师询问更多信息。你的atEnd
功能与str.endswith
完全冗余,这是一个内置的本机方法,因此已经有了一个高效的实现
我只需编写print(first.endswith(second))
——无需进一步复杂化
如果出于某种原因,您确实想要一个自由函数而不是一个方法,那么您可以直接调用str.endswith
:print(str.endswith(first,second))
如果出于效率考虑,您想编写自己的实现,那么最好使用另一种算法(例如,构建后缀树)。如果您想编写自己的实现来理解低级字符串操作,您真的应该学习C语言并阅读。如果你这样做是因为学校作业告诉你不要使用
endswith
,那么这对我来说似乎是一个愚蠢的作业——你可能应该向老师询问更多信息。尝试使用re
模块的方法findall
:
import re
EndsWith = lambda first,second: re.findall("("+first+")$",second) != []
尝试使用
re
模块的方法findall
:
import re
EndsWith = lambda first,second: re.findall("("+first+")$",second) != []
为什么要避免使用
结束
?这是一个非常简单的方法。为什么你有second in first
,first。endswith(second)
涵盖了这两种情况。你的问题听起来像是“如何在不使用方向盘的情况下驾驶汽车?”。如果您不想使用最明显、最方便的解决方案来解决问题,请解释您的决定。您为什么要避免使用结束
?这是一个非常简单的方法。为什么你有second in first
,first。endswith(second)
涵盖了这两种情况。你的问题听起来像是“如何在不使用方向盘的情况下驾驶汽车?”。如果你不想用最明显、最方便的方法来解决这个问题,那么请解释你的决定。好吧,这个问题消除了显而易见的可读方法。是什么使得这种方法特别低效?切片操作意味着您将不必要地复制字符串。如果您对其进行基准测试,我预计这将比endswith
慢得多。当然,我同意-当然在任何实际设置中,最好使用内置方法。@DanielPryden如果内存是一个问题,那么类似于:second and all(a==b代表a,b在zip中(反转(第一),反转(第二)))
-但是,除非你要处理大量的秒
,否则它的开销比它的价值要大。好吧,这个问题消除了显而易见的可读方法。是什么使得这种方法特别低效?切片操作意味着您将不必要地复制字符串。如果您对其进行基准测试,我预计这将比endswith
慢得多。当然,我同意-当然在任何实际设置中,最好使用内置方法。@DanielPryden如果内存是一个问题,那么类似于:second and all(a==b代表a,b在zip中(反转(第一),反转(第二)))
-但除非你要处理大量的秒
,否则这会带来更多的开销。