在 Python 中查找给定列表中最长的 k 个单词


我们有一个场景,需要从包含许多不同长度单词的列表中挑选出前 n 个最长的单词。在本文中,我们将看到实现这一目标的各种方法。

使用 count() 和 sorted()

我们首先将列表中的元素按逆序排序,以便最长的单词位于列表的开头。然后查找每个单词的长度并将计数结果添加到一个变量中。最后,获取我们需要的那几个最长单词的切片。

示例

 在线演示

from itertools import count

def longwords(l, x):
   c = count()
   return sorted(l, key=lambda i: (len(i), next(c)),
                  reverse=True)[:x]

listA = ['Earth','Moonshine','Aurora','Snowflakes','Sunshine']
n = 2
print(longwords(listA, n))

输出

运行上述代码将得到以下结果:

['Snowflakes', 'Moonshine']

使用 zip 和 enumerate

在这种方法中,我们使用 enumerate 列出列表的每个元素,然后应用 sorted 和 zip 函数来获取计数。负长度值表示反向排序顺序,最后我们对所需的计数进行切片。

示例

 在线演示

def longwords(l, x):
   idx, words = zip(*sorted(enumerate(l),
   key = lambda i: (-len(i[1]), -i[0]))[:x])
   return list(words)

listA = ['Earth','Moonshine','Aurora','Snowflakes','Sunshine']
n = 2
print(longwords(listA, n))

输出

运行上述代码将得到以下结果:

['Snowflakes', 'Moonshine']

更新于:2020年8月26日

162 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.