Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tìm k từ dài nhất trong danh sách cho trước trong Python


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