【问题标题】:Python's most efficient way to choose longest string in list?Python在列表中选择最长字符串的最有效方法?
【发布时间】:2010-10-26 18:39:36
【问题描述】:

我有一个可变长度的列表,并试图找到一种方法来测试当前正在评估的列表项是否是列表中包含的最长字符串。我正在使用 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()

肯定有一个我忽略的简短而优雅的简单列表推导式?

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    要获取列表中最小或最大的项目,请使用内置的 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 函数,如果你正确地将它映射为字符串并将其用作比较。当然,我建议只找到最大值一次,而不是列表中的每个元素。

    【讨论】:

      【解决方案2】:
      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)
      

      【讨论】:

        【解决方案3】:
        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
        

        【讨论】:

          【解决方案4】:

          如果有超过 1 个最长的字符串(想想 '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】:

            len(each) == max(len(x) for x in myList) 或只是each == max(myList, key=len)

            【讨论】:

            • 你能简单解释一下吗?
            【解决方案6】:

            Python documentation本身,你可以使用max

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

            【讨论】:

            • 不适用于 Python 2.4。请参阅 this postthis post 了解在 2.4 下实现的代码。
            • 它只返回第一个最长的字符串:例如,print(max(["this", "does", "work"], key=len)) 只返回"this",而不是返回所有最长的字符串。
            • 同上@AndersonGreen。是否可以以同样良好地捕获列表中满足调用(键)的两个以上元素的方式重新部署该方法?
            • 跟进我之前提出的问题,我已经链接了一个回复,以纠正第一项如果所有其他平等问题...
            • 要在线性时间内获取每个最大元素,您必须执行m=max(map(len,xs)); [x for x in xs if len(x) == m]。我不认为它可以在一行中很好地完成。
            猜你喜欢
            • 2022-09-30
            • 2020-10-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-23
            相关资源
            最近更新 更多