二维列表中的索引位置以从同一列表中获取子返回值

时间:2018-07-31 23:41:43

标签: python python-3.x

因此,基本上atm我列出了两个不同的列表,它们的位置彼此对应。 用户输入项目名称。该程序在预定义列表中搜索其索引,然后从第二个列表中给出其相应的值。

我想要的是第一个要使用的评论(2d列表)上的列表。用户是否有可能使用该列表输入:“面包”。

程序获取其索引,然后返回值5。 基本上是在2d列表中建立索引。我进行了很多搜索,但无济于事。

如果您可以提供代码或至少指导我正确的方法。

谢谢。

#super_market_prices=[['Bread',5],['Loaf',100],['Meat_Chicken',2.4],['Meat_Cow',450]]
'''
Program listing Super Market Prices
Search by name and get the price
'''
super_market_items=['Bread','Loaf','Meat_Chicken','Meat_Cow']
super_market_prices=[5,4,20,40]

item=str(input('Enter item name: '))
Final_item=item.capitalize()                    #Even if the user inputs lower_case
                                                #the program Capitalizes first letter
try:
    Place=super_market_items.index(Final_item)
    print(super_market_prices[Place])
except ValueError:
    print('Item not in list.')

3 个答案:

答案 0 :(得分:4)

您不需要2D列表,而需要字典,幸运的是,从2D列表(每个子列表只有两个元素)到字典是非常简单的:

prices = [['Bread',5],['Loaf',100],['Meat_Chicken',2.4],['Meat_Cow',450]]
d = dict(prices)
# {'Bread': 5, 'Loaf': 100, 'Meat_Chicken': 2.4, 'Meat_Cow': 450}

现在您所要做的就是查询字典(O(1)查找):

>>> d['Bread']
5

如果要启用错误检查:

>>> d.get('Bread', 'Item not found')
5
>>> d.get('Toast', 'Item not found')
'Item not found'

答案 1 :(得分:1)

通过使用zip

,您可以轻松地从这两个单独的序列中的“ 2d列表”中移出
super_market_prices=[['Bread',5],['Loaf',100],['Meat_Chicken',2.4],['Meat_Cow',450]]

l1, l2 = zip(*super_market_prices)

>>> print(l1)
('Bread', 'Loaf', 'Meat_Chicken', 'Meat_Cow')
>>> print(l2)
(5, 100, 2.4, 450)

并保持您的代码不变。

答案 2 :(得分:1)

这是解决您的问题的另一种方法。附注:我使用@ user3483203的建议使用this.session.on("connectionDestroyed", function(event) { console.log(event); }); 而不是item.title(),因为后者导致带下划线的字符串出错。在这里,我利用了一个事实,即每个项目的价格都高。因此item.capitalize()

index+1