Cara Python yang paling efisien untuk memilih string terpanjang dalam daftar?

254

Saya memiliki daftar panjang variabel dan saya sedang berusaha menemukan cara untuk menguji apakah item daftar yang sedang dievaluasi adalah string terpanjang yang terdapat dalam daftar. Dan saya menggunakan Python 2.6.1

Sebagai contoh:

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

Tentunya ada pemahaman daftar sederhana yang pendek dan elegan yang saya hadapi?

pengguna104997
sumber

Jawaban:

620

Dari dokumentasi Python itu sendiri, Anda dapat menggunakan max:

>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456
Paolo Bergantino
sumber
1
Tidak akan bekerja untuk Python 2.4. Lihat posting ini dan posting ini untuk kode untuk diterapkan di bawah 2.4.
Kumba
13
Ini hanya mengembalikan string terpanjang pertama: misalnya, print(max(["this", "does", "work"], key=len))hanya mengembalikan "this"bukan mengembalikan semua string terpanjang.
Anderson Green
ditto @AndersonGreen. Bisakah metode ini digunakan kembali dengan cara yang menangkap dua elemen + daftar yang memenuhi panggilan (kunci) dengan baik?
David Shaked
Menindaklanjuti pertanyaan saya dari sebelumnya, saya telah mengaitkan respons yang memperbaiki masalah item-pertama-jika-semuanya-sama-sama ...
David Shaked
4
Untuk mendapatkan setiap elemen terbesar, dalam waktu linier, Anda harus melakukannya m=max(map(len,xs)); [x for x in xs if len(x) == m]. Saya tidak berpikir itu bisa dilakukan dengan baik dalam satu baris.
Thomas Ahle
6

Apa yang harus terjadi jika ada lebih dari 1 string terpanjang (pikirkan '12', dan '01')?

Cobalah itu untuk mendapatkan elemen terpanjang

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

Dan kemudian pertemuan rutin

for st in mylist:
    if len(st)==max_length:...
Elazar Leibovich
sumber
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)

atau lebih mudah:

max(some_list , key = len)
Саво Вуковић
sumber
4

Untuk mendapatkan item terkecil atau terbesar dalam daftar, gunakan fungsi min dan maks bawaan:

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

Seperti pengurutan, Anda bisa meneruskan argumen "kunci" yang digunakan untuk memetakan item daftar sebelum dibandingkan:

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

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

Sepertinya Anda bisa menggunakan fungsi max jika Anda memetakannya dengan benar untuk string dan menggunakannya sebagai perbandingan. Saya akan merekomendasikan hanya menemukan maks sekali meskipun tentu saja, tidak untuk setiap elemen dalam daftar.

Gavin H
sumber
2

len(each) == max(len(x) for x in myList) atau hanya each == max(myList, key=len)

Harry
sumber
4
dapatkah Anda memberikan penjelasan singkat?
David Shaked
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
Stijn Van den Bruel
sumber