Computer >> Máy Tính >  >> Lập trình >> Python

Tìm k từ dài nhất trong danh sách đã cho bằng Python

Chúng ta có một tình huống trong đó chúng ta phải chọn n từ dài nhất từ ​​danh sách chứa nhiều từ có độ dài khác nhau. Trong bài viết này, chúng ta sẽ thấy nhiều cách tiếp cận khác nhau để đạt được điều đó.

Với count () và sắp xếp ()

Đầu tiên chúng ta sắp xếp các phần tử của danh sách theo thứ tự ngược lại để các từ dài nhất có sẵn ở đầu danh sách. Sau đó, tìm độ dài của mỗi từ và thêm kết quả của số đếm vào một biến. Cuối cùng, hãy lấy một phần về số lượng từ dài nhất cần thiết mà chúng ta cần.

Ví dụ

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))

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

['Snowflakes', 'Moonshine']

Với zip và liệt kê

Trong cách tiếp cận này, chúng tôi sử dụng liệt kê để liệt kê từng phần tử của danh sách và sau đó áp dụng hàm đã sắp xếp và zip để tính số lượng. Các giá trị độ dài âm cho biết thứ tự sắp xếp ngược lại và cuối cùng chúng tôi chia nhỏ số lượng cần thiết.

Ví dụ

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))

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

['Snowflakes', 'Moonshine']