索引2D列表中的位置,以从同一列表中获取子返回值



所以基本上,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.')

你不想要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'

使用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)

并保持您的代码原样。

这是解决问题的另一个方法。P.S:我使用了@user3483203的建议,使用item.title()而不是item.capitalize(),因为后者导致带下划线的字符串出错。在这里,我利用了这样一个事实,即每件商品都有其价格。因此index+1

super_market_prices=np.array([['Bread',5],['Loaf',100],['Meat_Chicken',2.4],['Meat_Cow',450]]).ravel()
item=str(input('Enter item name: '))
Final_item=item.title()      
try:
index = np.where(super_market_prices == Final_item)[0] 
print (float(super_market_prices[index+1][0]))
except ValueError:
print('Item not in list.')

最新更新