列表python中的多个最大值

2024-05-23 18:06:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我到目前为止的密码

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

Tags: thekey函数字符串密码列表lendef
3条回答

试试这个:

def choice4(filelist):
    mymax = max(map(len,filelist))
    return [a for a in filelist if len(a)==mymax]

a = ['joe','andy','mark','steve']
a.extend(a)
print choice4(a)
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']

您可以使用排序代替:

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']

相关问题 更多 >