【问题标题】:Why does this return wrong max?为什么这会返回错误的最大值?
【发布时间】:2021-07-01 02:20:11
【问题描述】:

我需要编写一个程序来返回最大值股票及其价值。但是,它不断返回ccc,300 作为最高价值股票

stock = [('aaa',100),('bbb',12000),('ccc',300)]
def pricechk(stock):
    for name,price in stock:
        var_price =0
        var_name =''
        if price > var_price:
            var_price =price
            var_name =name
        else:
            pass
    return (var_name,var_price)
    
print(pricechk(stock))

【问题讨论】:

    标签: python return tuples


    【解决方案1】:

    您的代码在for 循环的每次迭代中重置var_pricevar_name 变量。因此,您只是返回最后一个库存,因为您忘记了之前迭代的结果。

    最简单的方法是移动

        var_price =0
        var_name =''
    

    直到for 循环之前;当然,Python 有一个内置的max 函数,你一定要学会使用它。

    print(max(stock, key=lambda x: x[1]))
    

    在这里,我们说我们想要列表stock 中的max 元素,使用简单的lambda 从每个元素中提取要比较的值。

    顺便说一句,您可能应该定义如何处理平局 - 返回两个最大值?或者选择名字按字母顺序排在第一位的那个?如果您愿意在每个元组中切换元素的顺序,则后者可以完全在没有lambda 的情况下完成,但对于大多数实际情况可能不太有用(您想知道有一个平局,即可能让代码返回所有max 元素)。

    另外,else: pass 完全没有必要。 else: 子句是可选的,所以如果您没有 else: 的情况,请忽略它。

    【讨论】:

    • 如果这解决了您的问题,请考虑投票和/或接受它。如果您愿意,欢迎您发布自己的答案并接受。接受答案通过将您的问题标记为已解决来帮助未来的访问者。另见help.
    猜你喜欢
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多