2016-10-12 1 views
0

2番目の最後の数字(x[1])と、リスト内のさまざまな項目の他の数字(list)の差を計算します。リストのデータはどのように取り出すことができますか?

リストの最初の項目は、19-13(= 6)、19-16および19-19である必要があります。問題は、リストの項目が3または4(時には5/6)の数字で構成されていることです。

list = [([(13, 400), (14, 700), (19, 700)], 19, 1800), 
       ([(24, 250), (28, 650), (35, 100), (43, 600)], 43, 1600), 
       ([(46, 450), (48, 600), (78, 450)], 78, 1500), 
       ([(79, 650), (88, 400), (92, 600), (96, 50)], 98, 1700)] 

1= [] 
for x in list: 
    1.append(x[0][0][0]) 
print "1", 1 

2= [] 
for xin list: 
    2.append(x[0][1][0]) 
print "2", 2 

3= [] 
for xin list: 
    3.append(x[0][2][0]) 
print "3", 3 

4= [] 
for xin list: 
    4.append(x[0][3][0]) 
print "4", 4 

time= [] 
for xin list: 
    time.append(x[1]) 
print time 

結果:

1 [13, 24, 46, 79] 
2 [14, 28, 48, 88] 
3 [19, 35, 78, 92] 
Traceback (most recent call last): 
    File "test.py", line 26, in <module> 
    4.append(order[0][3][0]) 
IndexError: list index out of range 

リストは以下の4つの項目で構成項目で構成されている場合、エラーがのみ表示されます。そのため、の[3]には「空のアイテム」があります。


ありがとうございましたnigel222、どちらも機能しましたが、私はあなたの最初の提案を使用しました。機能:

for x in list: 
    if len(x[0]) >= 4: 
     4.append(x[0][3][0]) 
    else: 
     fourthorder.append(order[1]) 

その後私はXとの間の差を計算する[1]及び4に示し、そう他の場合:私は他の使用された同じ長さの2つのリストを作成するために使用されるが、X [1] -X [1]は0を返します。

+0

あなたのコードには、これらの相違点が計算され、保存されている場所や、それに対応する項目のうち、「提供されたもの」の数に応じて、どのようなものが必要かは示されません。あなたの質問を編集し、このコードと情報を追加してください。 – martineau

+0

「1」、「2」などの名前の変数は使用できません。変数名はアルファベット文字で始まる必要があります。 – martineau

答えて

1

第4の項目がないときに何をすべきか正確に知っていると仮定して、事前にテストするか例外を処理する2つの主な方法があります。最初

チェック:処理した例外は、事前に行われ、簡単なテストよりも高価であるため、

fourthorder_arrival_of_batch = [] 
for order in servedbook: 
    if len(order[0]) > 3: 
     fourthorder_arrival_of_batch.append(order[0][3][0]) 
    #else: 
     #append a default value if desired 
print "4", fourthorder_arrival_of_batch 

ハンドル例外

fourthorder_arrival_of_batch = [] 
for order in servedbook: 
    try: 
     fourthorder_arrival_of_batch.append(order[0][3][0]) 
    except IndexError: 
     #append a default value if desired, or 
     pass 
print "4", fourthorder_arrival_of_batch 

例外は、珍しいケースでなければなりません。しかし、10%以下の例外が例外的であれば、これはまれにしか問題にならず、テストが単純ではない場合、例外を処理するほうが効率的かもしれません。

+0

30秒で私を殴る、ちょうど応答をフォーマットしていた! Pythonのマニュアルには、「許可よりも許してほしいと思う方が簡単です。この共通のPythonコーディングスタイルは、有効なキーまたは属性の存在を前提としており、仮説が誤っている場合は例外をキャッチします。このクリーンで速いスタイルは、多くの試行錯誤の存在が特徴です。このテクニックは、C言語のような他の多くの言語に共通するLBYLスタイルと対照的です。私はあなたも賢明でなければならないと思います:) – roganjosh

+0

@roganjosh例外を扱うほとんどのケースでは、テストがそれほど遅くないか、 、 もっと早く。例外はテストがシンプルなところです(ここのように)*例外的なケースは実際には共通です。それでも、コードのこの部分が重要なCPU使用量に大きく寄与する内部ループである場合にのみ重要です。 (「例外」がコメントされていない限り「通常の」コードパスよりもはるかに多いかどうかを読むことも混乱します)。 – nigel222

関連する問題