Python 列表中的多个最大值

1 投票
4 回答
10428 浏览
提问于 2025-04-17 13:33

嘿,作为一个新手,我想知道怎么从一个列表中找到多个最大值(也就是说,有不止一个最大值或者长度相同的项)和最小值(情况和最大值一样)。我试过用 max 函数,但它只打印出一个项,min 也是这样。我想要的是根据列表中字符串的长度来找最大值和最小值(比如用 len)!

这是我到目前为止写的代码

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

4 个回答

0

在编程中,有时候我们需要把一些数据从一个地方传到另一个地方。这个过程就像把水从一个水壶倒到另一个水壶一样。我们可以用不同的方法来实现这个过程,比如使用变量、函数或者其他工具。

有些时候,我们需要确保在传输数据的时候,不会出现错误。就像在倒水的时候,我们要小心不要洒出来一样。为了做到这一点,我们可以使用一些检查和验证的方法,确保数据是正确的。

另外,编程中还有一些特定的规则和约定,就像在生活中我们有交通规则一样。这些规则帮助我们更好地理解和使用编程语言,让我们的代码更容易阅读和维护。

总之,编程就像是一个复杂的拼图游戏,我们需要把不同的部分组合在一起,才能完成一个完整的作品。

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

试试这个:

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)

撰写回答