在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']

带拉链和枚举

在这种方法中,我们使用枚举列出列表中的每个元素,然后应用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']