在列表Python列表中搜索元素

时间:2016-09-27 00:36:41

标签: python list search element

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

我目前有:

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: ")

当我运行程序并在列表中输入有效元素时,它不会识别为列表中的元素。

我做错了什么?

如果元素在列表列表中,那么为索引提供的代码是什么?

4 个答案:

答案 0 :(得分:1)

Python中的

in关键字用于检查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 :(得分: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))。

答案 2 :(得分:0)

以下是我找到的解决方案:

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf.fit([[1,2,3],[10,19,20],[6,7,7]],[1,1,0])    
clf.apply([[6,7,7]])
# array([3])

首先,您应该迭代所有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) 元素,然后检查第一个元素是否是您要查找的发票。

答案 3 :(得分: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