2009-05-16 69 views
149

Tôi có một danh sách độ dài biến 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.1Cách hiệu quả nhất của Python để chọn chuỗi dài nhất trong danh sách?

Ví dụ:

mylist = ['123','123456','1234'] 

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

Tôi hoàn toàn mới để trăn và tôi chắc chắn rằng tôi chỉ có một rắm não. Chắc chắn có một sự hiểu biết danh sách đơn giản ngắn và thanh lịch mà tôi nhìn?

Cảm ơn!

Trả lời

392

Từ Python documentation bản thân, bạn có thể sử dụng max:

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

Thank y rất nhiều. – user104997

+60

Tuyệt đối đẹp. –

+0

Thú vị, thực sự tốt đẹp. –

1

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

+1

bạn có thể cung cấp giải thích ngắn gọn không? –

1

Để có được món hàng nhỏ nhất hoặc lớn nhất trong danh sách, sử dụng được xây dựng trong phút và chức năng tối đa:

lo = min(L) 
hi = max(L) As with sort (see below), you can pass in a key function 

rằng được sử dụng để lập bản đồ các mục danh sách trước khi họ được so sánh:

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

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

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

4

Đ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 những yếu tố dài nhất

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

Và sau đó thường xuyên foreach

for st in mylist: 
    if len(st)==max_length:... 
0
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 
1
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 nhiều dễ dàng hơn:

max(some_list , key = len) 
Các vấn đề liên quan