Cách hiệu quả nhất của Python để chọn chuỗi dài nhất trong danh sách?


254

Tôi có một danh sách độ dài thay đổi và đang cố gắng tìm cách kiểm tra xem mục danh sách hiện đang được đánh giá có phải là chuỗi dài nhất có trong danh sách hay không. Và tôi đang sử dụng Python 2.6.1

Ví dụ:

mylist = ['abc','abcdef','abcd']

for each in mylist:
    if condition1:
        do_something()
    elif ___________________: #else if each is the longest string contained in mylist:
        do_something_else()

Chắc chắn có một sự hiểu biết danh sách đơn giản mà ngắn gọn và thanh lịch mà tôi đang xem?

Câu trả lời:


620

Từ tài liệu Python , bạn có thể sử dụng max:

>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456

1
Không hoạt động cho Python 2.4. Xem bài đăng nàybài đăng này để biết mã để thực hiện theo 2.4.
Kumba

13
Nó chỉ trả về chuỗi dài nhất đầu tiên: ví dụ, print(max(["this", "does", "work"], key=len))chỉ trả về "this"thay vì trả về tất cả các chuỗi dài nhất.
Anderson Green

ditto @AndersonGreen. Phương thức có thể được triển khai lại theo cách nắm bắt hai phần tử + của danh sách đáp ứng cuộc gọi (khóa) tốt như nhau không?
David Lắc

Theo dõi câu hỏi của tôi từ trước đó, tôi đã liên kết một câu trả lời khắc phục vấn đề đầu tiên-nếu-tất cả mọi thứ khác ...
David Shakes

4
Để có được mọi phần tử lớn nhất, trong thời gian tuyến tính, bạn phải làm m=max(map(len,xs)); [x for x in xs if len(x) == m]. Tôi không nghĩ rằng nó có thể được thực hiện độc đáo trong một dòng.
Thomas Ahle

6

Điều gì sẽ xảy ra nếu có nhiều hơn 1 chuỗi dài nhất (nghĩ '12' và '01')?

Hãy thử điều đó để có được yếu tố dài nhất

max_length,longest_element = max([(len(x),x) for x in ('a','b','aa')])

Và sau đó là thuyết minh thường xuyên

for st in mylist:
    if len(st)==max_length:...

5
def longestWord(some_list): 
    count = 0    #You set the count to 0
    for i in some_list: # Go through the whole list
        if len(i) > count: #Checking for the longest word(string)
            count = len(i)
            word = i
    return ("the longest string is " + word)

hoặc dễ dàng hơn nhiều:

max(some_list , key = len)

4

Để có được mục nhỏ nhất hoặc lớn nhất trong danh sách, hãy sử dụng các hàm tối thiểu và tối đa tích hợp:

lo = min(L)
hi = max(L)

Giống như sắp xếp, bạn có thể chuyển vào một đối số "khóa" được sử dụng để ánh xạ các mục danh sách trước khi chúng được so sánh:

lo = min(L, key=int)
hi = max(L, key=int)

http://effbot.org/zone/python-list.htmlm

Có vẻ như bạn có thể sử dụng hàm max nếu bạn ánh xạ chính xác cho chuỗi và sử dụng nó làm so sánh. Tất nhiên, tôi khuyên bạn chỉ nên tìm tối đa một lần, không phải cho từng yếu tố trong danh sách.


2

len(each) == max(len(x) for x in myList) hoặc chỉ each == max(myList, key=len)


4
bạn có thể cung cấp một lời giải thích ngắn gọn?
David Lắc

1
def LongestEntry(lstName):
  totalEntries = len(lstName)
  currentEntry = 0
  longestLength = 0
  while currentEntry < totalEntries:
    thisEntry = len(str(lstName[currentEntry]))
    if int(thisEntry) > int(longestLength):
      longestLength = thisEntry
      longestEntry = currentEntry
    currentEntry += 1
  return longestLength
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.