リストで最も長い文字列を選択するPythonの最も効率的な方法は?


254

可変長のリストがあり、現在評価されているリストアイテムがリストに含まれる最も長い文字列であるかどうかをテストする方法を見つけようとしています。そして、私はPython 2.6.1を使用しています

例えば:

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

確かに、私が見落としている、簡潔でエレガントなシンプルなリストの理解がありますか?

回答:


620

Pythonのドキュメント自体から、以下を使用できますmax

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

1
Python 2.4では機能しません。2.4で実装するコードについては、この投稿この投稿を参照してください。
クンバ

13
最初に最も長い文字列print(max(["this", "does", "work"], key=len))のみを返します。たとえば、"this"最も長い文字列をすべて返すのではなく、返すだけです。
アンダーソングリーン

同上@AndersonGreen。メソッドは、呼び出し(キー)に等しく適合するリストの2つ以上の要素をキャプチャする方法で再デプロイできますか?
デビッド

以前の私の質問に続いて、最初の項目の場合はすべてが等しいという問題
David Shaked

4
すべての最大の要素を線形時間で取得するには、を実行する必要がありますm=max(map(len,xs)); [x for x in xs if len(x) == m]。一行でうまくできるとは思いません。
Thomas Ahle

6

最長の文字列が複数ある場合はどうなりますか( '12'と '01'を考えてください)?

それを試して最長の要素を取得してください

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

そして定期的な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)

またははるかに簡単:

max(some_list , key = len)

4

リストの最小または最大の項目を取得するには、組み込みのmin関数とmax関数を使用します。

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

並べ替えと同様に、リスト項目を比較する前にマップするために使用される「キー」引数を渡すことができます。

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

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

文字列に対して正しくマッピングし、それを比較として使用すると、max関数を使用できるように見えます。もちろん、リスト内の各要素ではなく、最大値を一度だけ見つけることをお勧めします。



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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.