查找多个最大值

时间:2019-03-10 04:09:50

标签: python python-3.x

我正在解决以下问题:

一家超市想要奖励每天的最佳顾客,并在超市的屏幕上显示顾客的姓名。为此,客户的购买金额存储在一个列表中,而客户名称存储在另一个列表中。实现一个函数nameOfBestCustomer(sales,客户),该函数返回销售额最大的客户的名称。编写一个程序,提示收银员输入所有价格和名称,将它们添加到两个列表中,调用您实现的方法并显示结果。将价格0用作哨兵。

我有以下代码可以正常工作,不同的是它不能说明多个客户,而相同的购买金额是最大值。关于如何轻松解决此问题的任何建议?我显然是Python新手,因此也欢迎您提出其他建议!谢谢!

sales = []
customers = []

def customerSales() :
        salesEntry = 0.01
        customersEntry = 0

        while salesEntry > 0 :
                salesEntry = float(input("Enter new purchase amount or a 0 to finish: "))
                if salesEntry > 0 :
                        sales.append(salesEntry)
                        customersEntry = input("Enter customer name: ")
                        customers.append (customersEntry)
customerSales()


def nameOfBestCustomer(sales, customers) :
#@param: sales and customers lists
#@return: none

        bestCustomer = ""
        salesMax = 0

        salesMax = max(sales)
        index = sales.index(salesMax)
        bestCustomer = customers[index]
        print("The best customer of the day was " + bestCustomer + ".")
        print("They spent $%.2f" % salesMax + ".")

nameOfBestCustomer(sales, customers)

3 个答案:

答案 0 :(得分:2)

现在,您正在使用library(tidyverse) my_data <- my_data %>% mutate(data_mod=map2(data,number,cbind)) 来获得销售额最高的第一个客户。听起来您想让所有争取最大销售量的客户并拢。有几种方法可以做到这一点,但是列表理解尤其是pythonic:

array_filter

然后,要回头客,您可以使用另一种列表理解:

strpos

您可以阅读有关列表理解here的更多信息。注意,第二个示例不是“列表”,但是它使用相同的理解语法来创建生成器。我将其输入到python <?php $a = ['benclinton','clintonharry','harryben','benwill','jasonsmith','smithclinton']; $a2 = ['ben','clinton','harry']; $res = array_filter($a,function($str="") use($a2){ $r =array_filter($a2,function($a2str) use($str){ return strpos($str,$a2str) !== FALSE; }); return count($r) > 1; }); print_r($res); ?> 中,以确保它返回不同的客户。

其他注意事项

  • 您不需要提前设置indexindices = [sale for sale in sales if sale == salesMax] 。它们可以即时创建。
  • 如果您使用我的代码,则需要更改打印答案的方式。
  • 我想知道您正在处理的问题是否真的希望您按客户总计销售额并找到支出最高的人。在这种情况下,您可能会发现zipgroupBy真的很方便。

答案 1 :(得分:0)

找到maxSale之后,您可以开始循环以查找所有最大销售额和客户。另外,您需要将bestCustomers列为清单。希望这会有所帮助。

170

答案 2 :(得分:0)

如果您的结果具有多个相同的最大值,则可以将List函数更改为此:

public class MyServiceRequest
{
   public List<string> PARAM { get; set; }
}