给定两个列表avail
和prod
,其中avail
是一个包含电话号码、商品代码和价格的列表,prod
是一个包含商品代码和名称的列表,如果avail
中的商品代码也在prod
(产品列表)中,我想尝试找到给定商品代码的最低价格,返回列表列表,其中提供每个项目的电话号码、价格和项目代码
我尝试了下面的代码,但它只是附加了每个j[2]
,这是可以理解的(它附加了所有的价格,只打印最小值)。我不知道如何实现这一点
def best_prices(avail,prod):
lowest_prices=[]
price_list=[]
for i in prod:
for j in avail:
if i[0]==j[1]:
price_list.append(j[2])
store_min=min(price_list)
print(store_min)
print(price_list)
lowest_prices.append(j)
return lowest_prices
列表的格式如下:
avail = [
['phone number', 'item code', 'price'],
...
]
prod = [
['item code', 'name of product'],
...
]
以下是一些输入示例:
prod = [
['123456789', '2L 2% Vitali Milk'],
['123456798', '1L 2% Vitali Milk'],
['456392452', '70% Cocoa Zimbra Chocolate'],
['456123490', 'Zimbra Milk Chocolate'],
['634590221', 'Onion flavour chips'],
['634599011', 'Vinegar flavour chips'],
['780123678', 'Sliced white bread'],
['780432109', 'Sliced whole wheat bread'],
['809001234', '2L Orange Juice'],
['808765432', '2L Apple Juice']
]
avail = [
['123456789', '7807890123', '2.58'],
['123456789', '7804922860', '2.99'],
['456392452', '7807890123', '2.11'],
['456123490', '7804922860', '3.10'],
['808765432', '7809876543', '4.10']
]
我想让我的程序为每个匹配的商品代码查找avail
以找到最低价格,然后返回包含最低价格电话号码和商品代码的列表
因此,对于:
prod = [
['123456789', '2L 2% Vitali Milk']
]
及
avail = [
['123456789', '7807890123', '2.58'],
['123456789', '7804922860', '2.99'],
['456392452', '7807890123', '2.11']
]
我想返回:
new_list = [
['2.58', '123456789', '7807890123']
]
以下是评论中的答案和解释:
结果:
只是解决方案:
我能给你们的第一个建议是对变量使用有意义的名称
考虑到这一点,我提出以下解决方案:
上述代码将产生以下输出:
上面的代码处理逻辑中的关系“先见先赢”。这意味着,如果有两个
vendors
具有相同的vendor_product_price
用于相同的vendor_product_code
,则第一个vendor
出现在报告中要将该行为更改为“最后一次看到,最后一次赢”,请将比较行中的
>
替换为>=
,如下所示:if prices[product_code]['price'] > vendor_product_price:
最后,另一种策略是基于
vendor_product_price
消除重复vendors
,保持最低价格,然后将products
与结果列表关联以下是这一想法的实施情况:
有很大的改进空间,但这是故意留下来的。我愿意说教,而不是讲求效率
下面是简单、清晰、非常符合Python的问题解决方案
我假设价格总是在
avail
列表中的最后一个位置,项目代码总是在avail
和prod
列表中的第一个位置。这很明显,但要注意列表的元素顺序解决方案:
示例:
如果返回列表的元素顺序对您来说非常重要(但我不这么认为),您可以重新排序(反转):
奖金:
Extreme one liner完全按照您的预期工作:
免责声明:在代码中使用这样的一行程序可能不是一个好主意
相关问题 更多 >
编程相关推荐