Cho danh sách từ, cần lấy k từ dài nhất.
Cách 1: sorted() với count()
Sắp xếp giảm dần theo độ dài, dùng itertools.count() để ổn định thứ tự, cắt k phần tử đầu.
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']
print(longwords(listA, 2)) # ['Snowflakes', 'Moonshine']
Cách 2: zip() và enumerate()
Dùng enumerate để có chỉ mục, sắp xếp theo độ dài giảm dần và chỉ mục giảm dần, cắt k phần tử.
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']
print(longwords(listA, 2)) # ['Snowflakes', 'Moonshine']