提问人:Varun 提问时间:10/7/2023 更新时间:10/7/2023 访问量:110
使用列表推导式查找句子中最长的单词的 Python 程序 [已关闭]
Python program that finds the longest word in a sentence using list comprehension [closed]
问:
假设我们得到了一个字符串。
s="This is my statement"
我们必须将句子作为输出,这需要使用列表推导概念来解决。
我尝试了下面的代码,它给了我一个空列表。
longest_word=[i for i in s.split() if len(i) == max(s)]
为此问题寻找一些有效的解决方案/建议。
答:
我会选择类似的东西
[k:=w for i,w in enumerate(s.split()) if i==0 or len(w)>len(k)][-1]
不确定。这种练习,那更像是程序员版的禁忌游戏,有规则。可能是我无权使用。也许我被授权使用不止一行......:=
与您的尝试相比,它具有一次通过的优势。你的(由 Marcin Orlowski 纠正)做了两个。一个(隐式)在函数中查找最大的单词。然后,另一个是列表推导,选择与该长度匹配的单词。max
从性能上讲,它可能并不重要(该函数非常快,因为它是一个本机函数,可能是用 C 编码的。因此,在理解列表相当慢之前调用它并不需要花费太多)。
但是,由于这显然是一种游戏/挑战/练习,因此无论谁会判断它,该算法需要 2 次通过,而真正只需要一次。max
for
代码中的错误出在表达式中。以这种方式使用 时,返回字符串中具有最高 ASCII 值的字符,而不是您错误地假设的最长单词的长度。因此,当您比较 时,您将当前单词的长度与一个没有意义的字符进行比较,因为字符(本质上是长度为 1 的字符串)和单词的长度(对于除单个字符以外的任何单词,长度将大于 1)永远不会相等,比较将始终计算到,这就是您得到空列表的原因。max(s)
max()
s
len(i) == max(s)
i
s
False
要找到字符串中最长的单词,可以使用 a 参数来构造,其中我们确实传递了用于比较长度的函数,以及列表推导来处理相同最大长度的多个单词:s
max()
key
len
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']
评论
max(s.split(), key=len)
max([(len(w), w) for w in s.split()])[1]
key
max
max((i for i in s), key=len)