如何在无限的 *args 列表中找到两个最大值?

我希望能够打印出列表中的两个最大值,并且我正在尝试使用pop方法从列表中删除 max1 值。我收到一条错误消息:

AttributeError: 'tuple' object has no attribute 'pop'

def findTwoLargest(*args):
    max1 = max(args)
    args.pop(max1)
    max2 = max(args)
        return max1, max2
        
maxResult1, maxResult2 = findTwoLargest(-2, 30, -4, 9, 1, 6)print(maxResult1, maxResult2)


白衣非少年
浏览 92回答 3
3回答

qq_遁去的一_1

由于 args 是一个元组,您无法删除值,但您的函数会尝试查找最大值 2 次,您可以使用以下命令更轻松地执行此操作:def findTwoLargest(*args):    maxes = sorted(args, reverse=True)[:2]       return maxes[0], maxes[1]它的作用是对 args 进行排序(它从元组创建一个新列表并返回排序后的列表),然后保留 2 个较大的元素,同时将它们存储在列表 maxes 中。

江户川乱折腾

从错误来看,参数似乎是作为元组而不是列表传递的。因此,在函数内部 args 被作为元组接收。因此,要删除元素,您首先将元组更改为列表,从列表中删除该元素并将其更改回元组。 #converting the tuple to list listx = list(tuplex)  #use different ways to remove an item of the list listx.remove("c")  #converting the tuple to list tuplex = tuple(listx)如果打印是唯一的目标,您还可以打印函数内的值而不是返回这些值。

月关宝盒

args是一个元组,因此是不可变的并且不能修改。下面的代码应该可以。args = list(args)if args:    max1 = max(args)    args.remove(max1)    print(max1)if args:    max2 = max(args)    args.remove(max2)    print(max2)args = tuple(args) # if a tuple is required.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python