在Python中,在同时包含字符串和浮点数的列表中查找最小值的最简单方法是什么?
我的代码要求提供产品列表或从文件中加载它们。然后,我需要找出哪个值最小,如果有同样小的元素,选择一个随机的。但是,我仍然需要将该值链接到它的相关字符串。到目前为止,我已经:在Python中,在同时包含字符串和浮点数的列表中查找最小值的最简单方法是什么?,python,python-3.x,Python,Python 3.x,我的代码要求提供产品列表或从文件中加载它们。然后,我需要找出哪个值最小,如果有同样小的元素,选择一个随机的。但是,我仍然需要将该值链接到它的相关字符串。到目前为止,我已经: def checkPrices(products): for x in range(len(products)): if (x)%3 == 0: name = str(products[x]) print(name) elif (x+1
def checkPrices(products):
for x in range(len(products)):
if (x)%3 == 0:
name = str(products[x])
print(name)
elif (x+1)%3 == 0:
quantity = int(products[x])
print(quantity)
pricePerUnit = str(format(price/quantity, '.2f'))
print(name + " is $" + pricePerUnit + " per unit")
elif (x)%1 == 0:
price = float(products[x])
print(price)
如何扩展此功能,以便找到每单位的最低价格,然后打印如下内容:
I would recommend product1
我建议不要像你看起来那样把所有的3个值都存储在一个简单的列表中
["product1", "3", "0.15", "product2", "4", "0.40"]
…而是将它们存储为元组列表:
[("product1", 3, 0.15), ("product2", 4, 0.40)]
这将保留每个项目的逻辑分组,并允许您执行以下操作
product_info = [("product1", 3, 0.15), ("product2", 4, 0.40)]
cheapest_product = min(product_info, key=lambda product: product[2] / product[1])
product_name, quantity, total_price = cheapest_product
print "I would recommend %s" % product_name
注意:如果您所拥有的只是平面列表,并且希望将其转换为元组列表
products = ["product1", "3", "0.15", "product2", "4", "0.40"]
products_iter = iter(products)
product_tuples = zip(products_iter, products_iter, products_iter)
product_info = [(i[0], int(i[1]), float(i[2]) for i in product_tuples]
而
product\u info
现在将是我上面描述的元组列表。我建议不要像您看起来那样将所有三个值都存储在一个平面列表中
["product1", "3", "0.15", "product2", "4", "0.40"]
…而是将它们存储为元组列表:
[("product1", 3, 0.15), ("product2", 4, 0.40)]
这将保留每个项目的逻辑分组,并允许您执行以下操作
product_info = [("product1", 3, 0.15), ("product2", 4, 0.40)]
cheapest_product = min(product_info, key=lambda product: product[2] / product[1])
product_name, quantity, total_price = cheapest_product
print "I would recommend %s" % product_name
注意:如果您所拥有的只是平面列表,并且希望将其转换为元组列表
products = ["product1", "3", "0.15", "product2", "4", "0.40"]
products_iter = iter(products)
product_tuples = zip(products_iter, products_iter, products_iter)
product_info = [(i[0], int(i[1]), float(i[2]) for i in product_tuples]
现在,
product\u info
将是我上面描述的元组列表。将您的产品
分为三组,以将其展开:
grouped = zip (*[iter(products)] * 3)
那就拿下那辆车
recommended = min(grouped, key=lambda (name, qty, price): float(price) / int (qty))[0]
将您的
产品
分为三类,以取消其包装:
grouped = zip (*[iter(products)] * 3)
那就拿下那辆车
recommended = min(grouped, key=lambda (name, qty, price): float(price) / int (qty))[0]
这个列表到底是什么样子的?['product1','18.5','72','product2','33','84','product3','18.50','72','product4','22','96']这个列表到底是什么样子的?['product1','18.5','72','product2','33','84','product3','18.50','72','product4','22','96']这将涉及重写我的大部分代码,因此有没有办法以这种格式执行?@user2368334-是的,用索引i遍历列表,如果i%3==0,则产品名称位于x+0,数量为x+1,价格为x+2。@user2368334请参阅我添加的注释。这将涉及重写我的大部分代码,因此有没有办法以这种格式执行此操作?@user2368334-是的,请使用索引I浏览列表,如果I%3==0,则产品名称为x+0,数量为x+1,价格为x+2。@user2368334请参阅我添加的注释。