我们有一种情况,我们必须从包含许多长度不同的单词的列表中选择前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']