for循环中的某些元素输出不同

时间:2016-04-19 20:43:27

标签: python

我有一个这样的数组:

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循环:

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)

如果我要运行它,程序会输出:

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

无论我怎么看代码,我都不明白为什么程序没有输出包含“不可用”的子数组,就像其余部分一样,我已经确定了数组的结构和元素的数量在每个数组中是相同的但由于某种原因它仍然在新行上输出“不可用”部分。如果我没有把问题写得最好,我很抱歉,但我想知道是否有人能发现我在这里做错了什么。

2 个答案:

答案 0 :(得分:2)

检查element != sub_list[4]时,它与“是索引4中的元素”不同,因为该行中有多个"N/A"值与最后一个相同(因此认为它是行的结尾)相反,您可以使用enumerate计算您所使用的索引:

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

或者你可以在每个内部for循环之后打破这些行:

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

请注意,上面使用了一种非常难以理解的填充方式,这种方式可能更容易理解:

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

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