2016-09-27 10 views
0

プログラミングの新機能。 私はリストを持っているプログラムを作成しようとしています(データベースとして)最初の要素は請求書、2番目はその請求書、3番目は所得証拠金です。請求書(入力)があれば、リスト内(データベース)のリストを検索します。リストのリスト内の要素を検索する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は」Falseで

"f1" == ["f1",2000,.24]あるリスト["f1",2000,.24] と比較され、これがTrueを返すべきであると仮定されていたと言うん文字列 "f1"はリスト["f1",2000,.24]と等しくないため、そうではありません。

、その後も虚偽である偽

し、最終的に

"f1" == ["f3",345000,.32]ある

"f1" == ["f2",150000,.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からデータをフィルタリングします。 result = [i [i] ==請求書の場合はData_baseのiのi] – Howardyan

関連する問題