2016-04-19 9 views
0

私はこのような配列があります。私のプログラムで特定の要素が異なっ

array=[['001', 'Playing Cards', '0.99', 2, 1.98], ['003', 'Keyboard', '12.99', 1, 12.99], 
['N/A', 'Unavailable', 'N/A', 'N/A', 'N/A'], ['002', 'Notebook', '0.59', 4, 2.36]] 

は、私が持っているこのようなループのために:

for subarray in array: 
    for element in subarray: 
     length=((20 if element==subarray[1] else 6)-(len(str(element)))) 
     if element != subarray[4]: 
      print((element)," "*length,end=" ") 
     else: 
      print((element)," "*length) 

私はこれを実行した場合、プログラムの出力:

Iを出力するプログラムです欲しい
001  Playing Cards   0.99 2  1.98 
003  Keyboard    12.99 1  12.99 
N/A  
Unavailable   N/A  
N/A  
N/A  
002  Notebook    0.59 4  2.36 

001  Playing Cards   0.99 2  1.98 
003  Keyboard    12.99 1  12.99 
N/A  Unavailable   N/A  N/A  N/A 
002  Notebook    0.59 4  2.36 

コードをどのように見ても、残りの部分と同じように「使用できない」サブアレイが出力されない理由はわかりません。配列の構造と各配列の要素の数は同じですが、なんらかの理由で新しい行に「使用できない」部分が出力されます。私は私の質問に最善を尽くしていないと謝罪しますが、誰かが私がここで間違っていることに気づくことができるかどうか疑問に思っていました。

+1

要素ならば問題は '行にある= sub_array [4]:!'。 'Unavailable'サブアレイでは、要素0,2,3、および4はすべて同一であることに注意してください。 – Hamms

+0

最初の 'for'ループの本文をインデントする必要があります。 – Barmar

+0

@Allanなぜあなたはあなたの質問の全体をかなり削除しましたか? –

答えて

2

element != sub_list[4]をチェックすると、最後のものと同じ行に複数の"N/A"値があるため、「これはインデックス4の要素ですか?」と同じではありません。上記の使用することを

for subarray in array: 
    for element in subarray: 
     length=((20 if element==subarray[1] else 6)-(len(str(element)))) 
     print((element)," "*length,end=" ") 

注:

for i,element in enumerate(sub_array): 
    ... 
    if i != 4: #check the index instead 
     ... 

それともあなただけのループのために、各インナー後にラインを破ることができます:行)の代わりに、あなたはenumerateと上にあるそのインデックスの数を維持することができます本当に難しいパディングを行うrstand方法は、この方法は簡単に少しは理解することがあるかもしれない:

for subarray in array: 
    for element in subarray: 
     if element == subarray[1]: 
      padding = 20 
     else: 
      padding = 6 
     print(str(element).ljust(padding), end=" ") 
    print() #end of line 
0

あなたのエラーがelement != subarray[4]ました。それは比較する文字列です。

リスト['N/A', 'Unavailable', 'N/A', 'N/A', 'N/A']では、この状態に問題がありません。

私はコードを修正しません。しかし、私は、文字列形式で別のソリューションを持っている {index:length}

array = [['001', 'Playing Cards', '0.99', 2, 1.98], ['003', 'Keyboard', '12.99', 1, 12.99], 
     ['N/A', 'Unavailable', 'N/A', 'N/A', 'N/A'], ['002', 'Notebook', '0.59', 4, 2.36]] 

for subarray in array: 
    # i must convert all of elements to string, because the 4. and 5. 
    # elements are str in the 'Unavailable' list but int in other lists 
    str_array = [str(element) for element in subarray] 
    print("{0:6}{1:20}{2:6}{3:6}{4:6}".format(*str_array)) 
    # index could be ignored 
    print("{:6}{:20}{:6}{:6}{:6}".format(*str_array)) 

結果:

001 Playing Cards  0.99 2  1.98 
003 Keyboard   12.99 1  12.99 
N/A Unavailable   N/A N/A N/A 
002 Notebook   0.59 4  2.36 
関連する問題