2016-09-27 132 views
0

编程新手。 我试图创建一个列表o列表(作为数据库)的第一个元素是发票,第二个发票的价值和第三个收入的边际。给定发票(输入),它将在列表中搜索列表(数据库)。在列表中搜索元素Python

我目前有:

Data_base= [["f1",2000,.24],["f2",150000,.32],["f3",345000,.32]] 
invoice = input("Enter invoice: ") 

if invoice in data_base : 
    print ("Invoice is valid") 

else : 
    print("Invoice does not exist, enter a valid document: ") 

当我运行该程序,我在列表中输入一个有效的元素,它不承认作为列表中的元素。

我在做什么错?

如果元素位于列表列表中,那么给出索引的代码是什么?

+0

您正在处理一个列表清单。所以,你的条件'如果data_base中的发票是不够的。您必须遍历您的清单,然后使用该条件 – idjaw

回答

1

in Python中的关键字用于检查iterator中某个元素的成员资格。这是iterator的每个元素都用操作数进行检查,如果iterator中存在操作数,则返回True。

in关键字专门用于查找列表中的data_base中的发票。现在,这个列表中的每个元素都是另一个列表,这是另一回事。

线if invoice in data_base :执行以下操作, 假定用户输入的是“F1” 现在的“F1”是相对于列表["f1",2000,.24]

"f1" == ["f1",2000,.24]哪个是假的,我们假定你是这应该返回True但它不会,因为字符串“f1”不等于列表["f1",2000,.24]

然后

"f1" == ["f2",150000,.32]哪个是假的

最后

"f1" == ["f3",345000,.32]这也是假。

您基本上将发票(用户输入)与整个元素(而不仅仅是元素的第一个元素)进行比较。

这个程序应该给你正确的输出。

Data_base= [["f1",2000,.24],["f2",150000,.32],["f3",345000,.32]] 
invoices_db = [ele[0] for ele in Data_base] 
invoice = input("Enter invoice: ") 
if invoice in invoices_db : 
    print ("Invoice is valid") 
else : 
    print("Invoice does not exist, enter a valid document: ") 

更多细节请参考上Use and meaning of "in" in an if statement in python

1

答案如果你想通过发票号码进行搜索,使用更好的数据结构是字典。将发票号码用作关键字,并将发票值和边距用作值。例如:

invoices = {'f1': [2000, .24], 
      'f2': [150000, .32], 
      'f3': [345000, .32]} 

invoice = input("Enter invoice: ") 
if invoice in invoices: 
    value, margin = invoices[invoice] 
    print('Invoice {} is valid. Value {}, margin {}'.format(invoice, value, margin)) 
else: 
    print("Invoice does not exist, enter a valid document: ") 

现在,当你说invoice in invoices Python会搜索在字典中的键发票号码。与在列表中搜索相比,这是一种非常高效的操作(O(1)与O(n))。

0

这是我找到了解决办法:

data_base = [["f1",2000,.24],["f2",150000,.32],["f3",345000,.32]] 
invoice = input("Enter invoice: ") 

found = False 

for data in data_base: 
    if invoice == data[0]: 
     found = True 
     break 

result = "Invoice is valid" if found else "Invoice does not exist, enter a valid document: " 

print(result) 

首先,你应该在所有data_base元素循环,然后检查是否第一个元素就是你要找的发票。

0
Data_base= [["f1",2000,.24],["f2",150000,.32],["f3",345000,.32]] 

invoice = 2000 

result = [i for i in Data_base if i[1] == invoice] 

for item in result: 

    print item 
+1

请始终为您的代码添加一些说明... – andreas

+0

发票是输入值,我只是设置了一个固定的数字。 并使用发票过滤来自data_base的数据。 结果= [我为我在Data_base如果我[1] ==发票] – Howardyan