2016-07-11 1 views
0

Je voudrais imprimer une liste côte à côte à plusieurs reprises. Ce qui se passe essentiellement dans mon programme, c'est que je prends une ligne de données à partir d'une feuille de calcul dans la boucle pour et que je remplis la liste client = []. J'ai alors une série de si et d'autres instructions pour déterminer si imprimer une valeur ou non. Je puis effacer client = [] à la fin de chaque rangée. Cela imprime de haut en bas, mais parce que je veux imprimer la sortie, je voudrais imprimer les résultats de chaque rangée de données côte à côte.Impression répétée d'une liste côte à côte

Notez que chaque ligne de ma feuille de calcul contient des données pertinentes pour un client et je souhaite essentiellement imprimer une liste pour chaque client côte à côte.

client = [] 

for rowOfCellObjects in Millar_sheet['A2':'AA13']: 
    for cellObj in rowOfCellObjects: 
      client.append(cellObj.value) 
      print(client[0]) #policy number 
      print(client[9]) #license plate 
    if client[12] != "Not Applicable": 
     float(client[12]) 
     print('S.I. = ' + '$' + str("%0.2f" % client[12])) 
    else: 
     print('S.I. ' + client[12]) 
     print('Basic = ' + '$' + str("%0.2f" % client[13])) 


client = [] 

C'est ce que la sortie ressemble à:

PP00041503 
PCR 2703 
S.I. Not Applicable 
Basic = $1000.00 
Loading = 15.0% 
Subtotal = $1150.00 
SP = 10.0%, -$103.50 
$1035.00 
NCD = 20.0%, -$207.00 
$828.00 
Pre-tax Premium is $828.00 
Premium Tax = +$49.68 
$877.68 
RS = +$100 
Total = $977.68 
--- END OF ROW --- 
PP00041503 
PCR 2703 
Basic = $1000.00 
Loading = 15.0% 
Subtotal = $1150.00 
SP = 10.0%, -$103.50 
$1035.00 
NCD = 20.0%, -$207.00 
$828.00 
Pre-tax Premium is $828.00 
Premium Tax = +$49.68 
$877.68 
RS = +$100 
Total = $977.68 
--- END OF ROW --- 

Je veux qu'il ressemble à ceci:

PP00041503       PP00041503 
PCR 2703       PCR 2703 
S.I. Not Applicable     Basic = $1000.00 
Basic = $1000.00     Loading = 15.0% 
Loading = 15.0%      Subtotal = $1150.00 
Subtotal = $1150.00     SP = 10.0%, -$103.50 
SP = 10.0%, -$103.50    $1035.00 
$1035.00       NCD = 20.0%, -$207.00 
NCD = 20.0%, -$207.00    $828.00 
$828.00        Pre-tax Premium is $828.00 
Pre-tax Premium is $828.00   Premium Tax = +$49.68 
Premium Tax = +$49.68    $877.68 
$877.68        RS = +$100 
RS = +$100       Total = $977.68 
Total = $977.68      --- END OF ROW --- 
--- END OF ROW --- 
+1

S'il vous plaît ajouter un petit exemple du résultat courant et souhaité –

+2

Quel est le résultat attendu? –

Répondre

0

Je ne suis pas sûr si je comprends bien votre question, mais vous pouvez imprimer côte à côte comme suit:

print "one", "two" 
print "one", 
print "two" 

Vous pouvez également enregistrer vos données dans un Pandas dataframe (df) et utilisation:

print df 
1

Je suppose que vous cherchez ceci:

print('a', end=' ') 
print('b', end=' ') 
print('c', end=' ') 
print('d') 
print('e', end='.') 

OUTPUT: a b c d 
OUTPUT: e. 

Si vous ne spécifiez pas un argument pour fin un nouveau caractère de ligne sera ajouté après chaque chaîne que vous imprimez. Vous pouvez bien sûr utiliser d'autres caractères que l'espace.

Si ce n'était pas ce que vous vouliez, il pourrait être une bonne idée de nous donner un exemple de votre sortie désirée.


EDIT

C'est un peu compliqué, mais il devrait fonctionner. Fondamentalement, avoir une liste (print_list) qui ajoute une liste (sortie) de la sortie de chaque ligne. print_list sera désormais une liste à 2 dimensions. Parcourez les valeurs y et les valeurs x et imprimez les éléments. Ajout de la clause try-except-clause si chaque ligne avait une quantité différente d'éléments à imprimer.

client = [] 
print_list = [] 

for rowOfCellObjects in Millar_sheet['A2':'AA13']: 
    output = [] 
    for cellObj in rowOfCellObjects: 
      client.append(cellObj.value) 
      output.append(client[0]) #policy number 
      output.append(client[9]) #license plate 
    if client[12] != "Not Applicable": 
     float(client[12]) 
     output.append('S.I. = ' + '$' + str("%0.2f" % client[12])) 
    else: 
     output.append('S.I. ' + client[12]) 
     output.append('Basic = ' + '$' + str("%0.2f" % client[13])) 
    print_list.append(output) 


for x in range(len(max(print_list, key=len))): 
    for y in range(len(print_list)): 
     try: 
      print(print_list[y][x], end=" ") 
     except IndexError: 
      pass 
    print("") 
+0

Sortie ajoutée à la question. J'ai besoin de 3 listes côte à côte. – Jim

+0

@Jim Là, je crois que cela devrait fonctionner. –

+0

Merci Ted, malheureusement, je reçois une erreur d'index. output.append (client [9]) #la plaque d'immatriculation IndexError: index de liste hors plage – Jim

1

Vous pouvez ajouter la sortie dans une chaîne et imprimer la chaîne résultante à la fin.

Exemple de code en fonction de votre description de poste:

output_str = '{} {}'.format(client[0], client[9]) 

if client[12] != "Not Applicable": 
    output_str = output_str + ' S.I. = ' + '$' + str("%0.2f" % client[12]) 
else: 
    output_str = output_str + ' S.I. ' + client[12] 
    output_str = output_str + ' Basic = ' + '$' + str("%0.2f" % client[13]) 
print (output_str) 
+0

Cela fonctionnerait sauf que j'ai besoin d'imprimer 3 listes côte à côte. – Jim