web-dev-qa-db-ja.com

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

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

例えば:

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

私はpythonが初めてで、頭がおならしているだけだと確信しています。確かに、私が見落としている簡潔でエレガントなリストの理解はありますか?

ありがとう!

200
user104997

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

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

最長の文字列が複数ある場合はどうなりますか(「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)

リスト内の最小または最大のアイテムを取得するには、組み込みのminおよびmax関数を使用します。

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

比較される前にリストアイテムをマップするために使用されます。

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

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

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

3
Gavin H

len(each) == max(len(x) for x in myList)または単にeach == max(myList, key=len)

1
HarryM
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