如何在python中访问列表中的值并链接两个列表

如何在python中访问列表中的值并链接两个列表,python,Python,我一直在学习python的基础知识,并一直在解决这个问题: 到目前为止我可以编写的代码: def calculate_bill_amount(gems_list, price_list, reqd_gems,reqd_quantity): bill_amount=0 for i in reqd_gems: if(i=="Emerald"): bill_amount=____*1760 return b

我一直在学习python的基础知识,并一直在解决这个问题:

到目前为止我可以编写的代码:

def calculate_bill_amount(gems_list, price_list, reqd_gems,reqd_quantity):
    bill_amount=0
    
    for i in reqd_gems:
        if(i=="Emerald"):
            bill_amount=____*1760
    return bill_amount

#List of gems available in the store
gems_list=["Emerald","Ivory","Jasper","Ruby","Garnet"]

#Price of gems available in the store. gems_list and price_list have one-to-one correspondence
price_list=[1760,2119,1599,3920,3999]

#List of gems required by the customer
reqd_gems=["Ivory","Emerald"]

#Quantity of gems required by the customer. reqd_gems and reqd_quantity have one-to-one correspondence
reqd_quantity=[3,2]

bill_amount=calculate_bill_amount(gems_list, price_list, reqd_gems, reqd_quantity)
print(bill_amount)
我无法从reqd_数量中获取值并将其链接到确切的reqd_gem。请有人帮我理解逻辑或提供逻辑(这样我可以自己使用调试器理解它)。
不需要整个问题的逻辑,而只需要如何将数量与确切的宝石本身联系起来。

请参考以下内容,使用
字典
快速解决问题-

#List of gems available in the store
gems_list=["Emerald","Ivory","Jasper","Ruby","Garnet"]
#Price of gems available in the store. gems_list and price_list have one-to-one correspondence
price_list=[1760,2119,1599,3920,3999]

# create dictionary based on both lists since there is a 1:1 relationship without duplicates
gem_dict = {gem_name:gem_price for (gem_name, gem_price) in zip(gems_list, price_list)}

#List of gems required by the customer
reqd_gems=["Ivory","Emerald"]
#Quantity of gems required by the customer. reqd_gems and reqd_quantity have one-to-one correspondence
reqd_quantity=[3,2]

# create dictionary based on both lists since there is a 1:1 relationship without duplicates
purchase_dict = {gem_name:gem_amount for (gem_name, gem_amount) in zip(reqd_gems, reqd_quantity)}

# now you can get the price from the gem_dict by simply using .get("NameOfGem")
total_normal = sum([gem_dict.get(gem_name)*gem_amount for (gem_name, gem_amount) in purchase_dict.items()])
gems_list=["Emerald","Ivory","Jasper","Ruby","Garnet"]
price_list=[1760,2119,1599,3920,3999]
price_dict=dict(zip(gems_list, price_list))

reqd_gems=["Ivory", "Emerald"]
reqd_qty=[3,2]
reqd_dict=dict(zip(reqd_gems, reqd_qty))

total=0
for gem in reqd_gems:
    total+=price_dict[gem]*reqd_dict[gem]

请参考以下内容,使用
字典
快速解决问题-

gems_list=["Emerald","Ivory","Jasper","Ruby","Garnet"]
price_list=[1760,2119,1599,3920,3999]
price_dict=dict(zip(gems_list, price_list))

reqd_gems=["Ivory", "Emerald"]
reqd_qty=[3,2]
reqd_dict=dict(zip(reqd_gems, reqd_qty))

total=0
for gem in reqd_gems:
    total+=price_dict[gem]*reqd_dict[gem]
如果有帮助: 您可以使用
gems\u list.index(“gem的名称”)
查找您所需gems的位置,然后您可以访问价格。

如果有帮助:
您可以使用
gems\u list.index(“gem的名称”)
查找所需gems的位置,然后您就可以访问价格。

您可以使用其列表索引将每个gem与其数量链接起来:

for gem in requested_gems:
    if gem == ‘Emerald’:
        bill_amount = req_quantity[requested_gems.index(gem)] * 1760


这会解决你的问题。但是,不要习惯于这些类型的解决方案。解决任何问题的首要步骤之一是确定要使用哪种数据结构。我知道您正在学习,但解决此问题的一个好数据结构是为每次购买考虑一个具有不同属性的对象。

您可以使用其列表索引将每个宝石与其数量链接:

for gem in requested_gems:
    if gem == ‘Emerald’:
        bill_amount = req_quantity[requested_gems.index(gem)] * 1760


这会解决你的问题。但是,不要习惯于这些类型的解决方案。解决任何问题的首要步骤之一是确定要使用哪种数据结构。我知道您正在学习,但解决此问题的一个好数据结构是为每次购买考虑一个具有不同属性的对象。

您可以这样做:


def计算账单金额(宝石清单、价格清单、需求宝石、需求数量):
gems_比率_映射={}
对于gem,zip中的价格(gems\u列表,price\u列表):
gems\u rate\u mapping[gem]=价格
计算出的账单=0
对于宝石,邮政编码中的数量(需要宝石,需要数量):
gem\u price=gem\u rate\u mapping.get(gem)
计算账单+=数量*宝石价格
#3万英镑以上可享受5%的折扣
折扣=0
如果计算的账单>30000:
贴现=计算的票据*(0.05)
打印(f“折扣:{折扣}”)
票据=计算的票据-折扣
退票
#商店提供的宝石清单
宝石列表=[“翡翠”、“象牙”、“碧玉”、“红宝石”、“石榴石”]
#商店提供的宝石价格。宝石清单和价格清单有一对一的对应关系
价目表=[1760219159939203999]
#客户要求的宝石清单
所需宝石=[“象牙”、“翡翠”]
#客户要求的宝石数量。REQUD_gems和REQUD_数量具有一对一的对应关系
需求数量=[3,2]
账单金额=计算账单金额(宝石清单、价格清单、需求宝石、需求数量)
打印(账单金额)

您可以执行以下操作:


def计算账单金额(宝石清单、价格清单、需求宝石、需求数量):
gems_比率_映射={}
对于gem,zip中的价格(gems\u列表,price\u列表):
gems\u rate\u mapping[gem]=价格
计算出的账单=0
对于宝石,邮政编码中的数量(需要宝石,需要数量):
gem\u price=gem\u rate\u mapping.get(gem)
计算账单+=数量*宝石价格
#3万英镑以上可享受5%的折扣
折扣=0
如果计算的账单>30000:
贴现=计算的票据*(0.05)
打印(f“折扣:{折扣}”)
票据=计算的票据-折扣
退票
#商店提供的宝石清单
宝石列表=[“翡翠”、“象牙”、“碧玉”、“红宝石”、“石榴石”]
#商店提供的宝石价格。宝石清单和价格清单有一对一的对应关系
价目表=[1760219159939203999]
#客户要求的宝石清单
所需宝石=[“象牙”、“翡翠”]
#客户要求的宝石数量。REQUD_gems和REQUD_数量具有一对一的对应关系
需求数量=[3,2]
账单金额=计算账单金额(宝石清单、价格清单、需求宝石、需求数量)
打印(账单金额)

我还没有了解字典的概念,但是谢谢你的回答。一旦我熟悉了字典,我会再看一遍。我还没有达到字典的概念,但是谢谢你的回答。一旦我熟悉了字典,我会再看一遍。我明白了,即使你用过字典,但我还没有达到字典的概念,不过谢谢你的回答。一旦我熟悉了字典,我会再看一遍。字典就像一张查表。简单的例子:dictionary={“name”:“Andreas”,“color”:“Red”}如果您想得到值,只需执行以下操作:dictionary.get(“name”),它将返回“Andreas”。我认为答案中更复杂的部分是列表理解和zip()函数,但它们都非常方便和强大。谢谢你我明白了,即使你用过字典,但我还没有达到字典的概念,但是谢谢你的回答。一旦我熟悉了字典,我会再看一遍。字典就像一张查表。简单的例子:dictionary={“name”:“Andreas”,“color”:“Red”}如果您想得到值,只需执行以下操作:dictionary.get(“name”),它将返回“Andreas”。我认为答案中更复杂的部分是列表理解和zip()函数,但它们都非常方便和强大。谢谢你谢谢你的解决方案。我会尽我所能自己去做,并且会记住你说的话。非常感谢。谢谢你的解决方案。我会尽我所能自己去做,并且会记住你说的话。非常感谢。非常感谢你的帮助非常感谢你的帮助非常感谢。我看你已经用这本字典解决了这个问题。一旦我被介绍到字典,我将尝试这个解决方案。非常感谢。我看你用过字典