Listedeki en uzun dizeyi seçmenin Python'un en etkili yolu nedir?


255

Değişken uzunlukta bir listesi var ve şu anda değerlendirilmekte olan liste öğesinin listede yer alan en uzun dize olup olmadığını sınamak için bir yol bulmaya çalışıyorum. Ve ben Python 2.6.1 kullanıyorum

Örneğin:

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

Kesinlikle gözden kaçırdığım kısa ve zarif basit bir liste kavrama var mı?

Yanıtlar:


621

Gönderen Python belgelerinde kendisi kullanabilirsiniz max:

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

1
Python 2.4 için çalışmayacak. Bkz Bu yayını ve bu yayını kodu 2.4 altında uygulamak için.
Kumba

13
Yalnızca ilk en uzun dizeyi döndürür: örneğin, en uzun dizelerin tümünü print(max(["this", "does", "work"], key=len))döndürmek "this"yerine yalnızca döner .
Anderson Green

@AndersonGreen. Yöntem, çağrıyı (anahtarı) eşit şekilde karşılayan listenin iki + öğesini yakalayacak şekilde yeniden konuşlandırılabilir mi?
David

Daha önceki sorularımı takiben, eğer her şey eşitse ilk maddeyi çözen bir cevabı
bağladım

4
Her büyük elemanı elde etmek için, lineer zamanda yapmanız gerekir m=max(map(len,xs)); [x for x in xs if len(x) == m]. Bir satırda güzelce yapılabileceğini sanmıyorum.
Thomas Ahle

6

En uzun 1 dize varsa ne olmalı ('12' ve '01' düşünün)?

En uzun elementi elde etmek için bunu deneyin

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

Ve sonra düzenli foreach

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)

veya çok daha kolay:

max(some_list , key = len)

4

Listedeki en küçük veya en büyük öğeyi elde etmek için yerleşik min ve maks işlevlerini kullanın:

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

Sıralamada olduğu gibi, liste öğelerini karşılaştırılmadan önce eşlemek için kullanılan bir "anahtar" bağımsız değişkenini iletebilirsiniz:

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

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

Dize için doğru şekilde eşlerseniz ve bunu karşılaştırma olarak kullanırsanız max işlevini kullanabileceğiniz anlaşılıyor. Listedeki her bir öğe için değil, elbette maks.


2

len(each) == max(len(x) for x in myList) ya da sadece each == max(myList, key=len)


4
kısa bir açıklama yapabilir misiniz?
David

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.