编程新手。 我试图创建一个具有列表列表(作为数据库)的程序,第一个元素是发票,第二个是发票的价值,第三个是收入边际。给定发票(输入),它将在列表中搜索列表(数据库)。
我目前有:
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 :(得分:1)
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