使用列表推导式查找句子中最长的单词的 Python 程序 [已关闭]

Python program that finds the longest word in a sentence using list comprehension [closed]

提问人:Varun 提问时间:10/7/2023 更新时间:10/7/2023 访问量:110

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

上个月关闭。

假设我们得到了一个字符串。

s="This is my statement"

我们必须将句子作为输出,这需要使用列表推导概念来解决。

我尝试了下面的代码,它给了我一个空列表。

longest_word=[i for i in s.split() if len(i) == max(s)]

为此问题寻找一些有效的解决方案/建议。

python 字符串 列表 -comprehension 最长子字符串

评论

2赞 Prudhviraj Panisetti 10/7/2023
您能否提供您需要从代码中获得的确切输出。
2赞 mousetail 10/7/2023
正常方法是,比使用列表推导要短得多,效率更高max(s.split(), key=len)
0赞 Sam Mason 10/7/2023
如果 OP 真的想使用列表推导式,@mousetail 是等价的,但使用 argument to 要好得多max([(len(w), w) for w in s.split()])[1]keymax
0赞 mousetail 10/7/2023
或者只是引入一个完全无用的列表理解max((i for i in s), key=len)
1赞 CtrlZ 10/7/2023
“理查德喜欢香蕉”的输出是什么?

答:

0赞 chrslg 10/7/2023 #1

我会选择类似的东西

[k:=w for i,w in enumerate(s.split()) if i==0 or len(w)>len(k)][-1]

不确定。这种练习,那更像是程序员版的禁忌游戏,有规则。可能是我无权使用。也许我被授权使用不止一行......:=

与您的尝试相比,它具有一次通过的优势。你的(由 Marcin Orlowski 纠正)做了两个。一个(隐式)在函数中查找最大的单词。然后,另一个是列表推导,选择与该长度匹配的单词。max

从性能上讲,它可能并不重要(该函数非常快,因为它是一个本机函数,可能是用 C 编码的。因此,在理解列表相当慢之前调用它并不需要花费太多)。 但是,由于这显然是一种游戏/挑战/练习,因此无论谁会判断它,该算法需要 2 次通过,而真正只需要一次。maxfor

0赞 Marcin Orlowski 10/7/2023 #2

代码中的错误出在表达式中。以这种方式使用 时,返回字符串中具有最高 ASCII 值的字符,而不是您错误地假设的最长单词的长度。因此,当您比较 时,您将当前单词的长度与一个没有意义的字符进行比较,因为字符(本质上是长度为 1 的字符串)和单词的长度(对于除单个字符以外的任何单词,长度将大于 1)永远不会相等,比较将始终计算到,这就是您得到空列表的原因。max(s)max()slen(i) == max(s)isFalse

要找到字符串中最长的单词,可以使用 a 参数来构造,其中我们确实传递了用于比较长度的函数,以及列表推导来处理相同最大长度的多个单词:smax()keylen

longest_word_length = max(len(word) for word in s.split())
longest_word = [word for word in s.split() if len(word) == longest_word_length]

实现后,您的测试用例将产生:

$ python test.py
['statement']

评论

0赞 Varun 10/7/2023
成功了!感谢您的宝贵解决方案。