为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣非少年 2023-10-26 15:50:40
我希望能够打印出列表中的两个最大值,并且我正在尝试使用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)
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

由于 args 是一个元组,您无法删除值,但您的函数会尝试查找最大值 2 次,您可以使用以下命令更轻松地执行此操作:

def findTwoLargest(*args):
   maxes = sorted(args, reverse=True)[:2]
      return maxes[0], maxes[1]

它的作用是对 args 进行排序(它从元组创建一个新列表并返回排序后的列表),然后保留 2 个较大的元素,同时将它们存储在列表 maxes 中。


查看完整回答
反对 回复 2023-10-26
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

从错误来看,参数似乎是作为元组而不是列表传递的。因此,在函数内部 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)

如果打印是唯一的目标,您还可以打印函数内的值而不是返回这些值。


查看完整回答
反对 回复 2023-10-26
?
月关宝盒

TA贡献1772条经验 获得超5个赞

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.


查看完整回答
反对 回复 2023-10-26
  • 3 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信