返回字符串中最长单词的python方法

2024-09-27 00:11:27 发布

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

我知道在一个字符串中寻找最长的单词已经被问过很多次了,但是我想知道以下方法之间的区别,以及为什么人们会使用方法a而不是方法B,或者反之亦然。在

方法A

def LongestWord(sen):
  lw = ''
  w = ''
  for c in sen:
    if c.isalpha():
      w += c
    else:
      if len(w) > len(lw):
        lw = w
      w = ''
  if len(w) > len(lw):
    lw = w
  return lw

VS方法B

^{pr2}$

再一次,我的目标是询问哪种方法更稳定,因为没有更好的词汇选择,以及为什么。如果你有自己的选择,请把它和你的解释一起贴出来。谢谢您!在


Tags: 方法字符串inforlenreturnifdef
3条回答

有不同的原因。 最重要的是,作为一个软件开发人员,您必须使用最简单、最容易理解的方式来编写函数。 方法B简洁明了,易于理解。方法A太复杂,难以理解:如果不知道函数的名称,甚至很难知道它是做什么的。在

这让我们看到了另一个方面:太难阅读的代码太难调试。方法B正确吗?一目了然,是的。方法正确吗?很难理解。我们可以编写一个测试,看看这两个函数是否都能工作(我们应该这样做),但是如果一个函数碰巧不起作用,那么调试方法B要比方法a容易得多

最后但并非最不重要的是,方法B快10倍

if __name__ == '__main__':
    import timeit

    print(timeit.timeit("LongestWordA('hello this is just an example')", number=1000, setup="from __main__ import LongestWordA"))
    print(timeit.timeit("LongestWordB('hello this is just an example')", number=1000, setup="from __main__ import LongestWordB"))

    # LongestWordA 0.013688346021808684
    # LongestWordB 0.004950157948769629

当我看第二种方法时,我可以立即看到发生了什么——一个字符串被连续的空格分割,然后返回最长的子字符串。在

当我看第一种方法时,要想弄清楚到底发生了什么,需要做更多的工作。在

关键是python提供了非常强大的实用程序来完成这些简单的任务——它使代码更易于编写、更易于阅读、更不容易出错等等。学会使用常见的习惯用法和函数是(IMHO)“pythonic”的本质

首先,第二种方法是非常可读的,而第一种方法不是。显然,该方法(具有max方法的知识)执行函数名所述的操作。编写可读的代码是我最喜欢的Python部分。在

第二,第一种方法负责定义单词是什么。部门

for c in sen:
  if c.isalpha():
    w += c

将使2spooky4mespookytoo短,因为LongestWord不将单个整数字符作为单词(ex. '2'.isalpha() == False)的一部分计算在内。对于使用此代码的人来说,这可能是意外的行为。在

最后,第二个示例更优雅地使用Pythons内置方法(例如max的特性,而不仅仅是len和二进制运算符),我相信这是语言设计的一个重要目标。在

相关问题 更多 >

    热门问题