【问题标题】:multiple maximums in a list python列表python中的多个最大值
【发布时间】:2013-01-08 15:16:01
【问题描述】:

嘿,作为新手,我想知道如何从列表中找到多个最大值(即有多个最大值或相同长度的项目)和最小值(与最大值相同的位置)。我尝试使用max 函数,但它只打印一项,与min 相同。对列表中字符串的长度进行处理(例如 usinglen)!

这是我目前的代码

    def choice4(filelist):
       try:
           c4longest=max(filelist,key=len)
           print(c4longest,"is the longest item in the list")

【问题讨论】:

  • 内置只会给你第一个最大值。如果要返回所有最大值,则需要为此滚动自己的函数(应该很容易)

标签: python list max minimum


【解决方案1】:
In [1]: l = 'Is that what you mean'.split()

In [2]: [word for word in l if len(word) == max(map(len, l))]
Out[2]: ['that', 'what', 'mean']

【讨论】:

  • 但是 O(n**2) 可以很容易地通过只计算一次最大值来减少到 O(n) ......(毕竟每次结果都是一样的)
  • @MartijnPieters 嗯,是的,但你的是O(n log n),它真的可以在一个循环中完成。但是,嗯。
【解决方案2】:

您可以改用排序:

maxed = sorted(inputlist, key=lambda i: len(i), reverse=True)
allmax = list(takewhile(lambda e: len(e) == len(maxed[0]), maxed))

这需要O(n log n) 时间进行排序;但它既简单又简短,因为最长的元素都在开头以便于挑选。

对于O(n) 解决方案,请使用循环:

maxlist = []
maxlen = 0
for el in inputlist:
    l = len(el)
    if l > maxlen:
       maxlist = [el]
       maxlen = l
    elif l == maxlen:
       maxlist.append(el)

maxlist 根据需要构建和替换以仅保存最长的元素:

>>> inputlist = 'And so we give a demo once more'.split()
>>> maxlist = []
>>> maxlen = 0
>>> for el in inputlist:
...     l = len(el)
...     if l > maxlen:
...        maxlist = [el]
...        maxlen = l
...     elif l == maxlen:
...        maxlist.append(el)
... 
>>> maxlist
['give', 'demo', 'once', 'more']

【讨论】:

  • 从算法的角度来看,这让我有点畏缩——当你只需要 O(n) 时,为什么要使用 O(nlogn) 算法? -- 也就是说,对于中等大小的列表,这是快速、简单且有效的。
【解决方案3】:

试试这个:

def 选择4(文件列表): mymax = max(map(len,filelist)) return [a for a in filelist if len(a)==mymax] a = ['乔','安迪','马克','史蒂夫'] a.扩展(一) 打印选择4(a)

【讨论】:

  • 如果您想修改我的帖子以更好地解决您的问题,请告诉我。谢谢!
【解决方案4】:

使用 collections.Counter

from collections import Counter
d = Counter({k:v for k,v in enumerate(L)})
print d.most_common(5)  # to get top 5

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 2020-12-24
    • 2023-03-30
    • 2017-12-15
    • 2012-04-18
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多