Hallo Python Experten, Folgendes Problem: SecLen=[0,0,0,0,0,0,0,0,0,0] ... Befüllen von SecLen ... print("S1: S2: S3: S4: S5: S6: S7: S8: ") print("===============================================") print([i for i in SecLen[1:9]]) S1: S2: S3: S4: S5: S6: S7: S8: =============================================== [912593, 1488619, 1488895, 1490275, 1264611, 0, 524287, 0] das funktioniert, wohingegen die Formatierung in Hex-Werte s.u. scheitert. print("S1: S2: S3: S4: S5: S6: S7: S8: ") print("===============================================") print("{0:>06x} {1:>06x} {2:>06x} {3:>06x} {4:>06x} {5:>06x} {6:>06x} {7:>06x}".format([i for i in SecLen[1:9]])) print("{0:>06x} {1:>06x} {2:>06x} {3:>06x} {4:>06x} {5:>06x} {6:>06x} {7:>06x}".format([i for i in SecLen[1:9]])) TypeError: non-empty format string passed to object.__format__ Mir ist nun nicht ganz klar, weshalb der Ausdruck print("...".format([i for i in SecLen[1:9]])) einen Fehler verursacht. [i for ..] ist wohl ein einziges Objekt, wohingegen format() acht Parameter erwartet. Wie schaffe ich es [] in acht einzelne Werte zu zerlegen? Ist für Euch wahrscheinlich trivial, aber ich stehe irgendwie auf dem Schlauch. Danke für hilfreiche Antworten.
Probiers mal mit dem * Operator: https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists
Bernd, Danke das war des Pudels Kern! Der * und ** Stern Operator war mir bis dato nur im Zusammenhang mit Directories bekannt. Aber ich habe es noch weit zum Python Experten ;-) print(" S1: S2: S3: S4: S5: S6: S7: S8: ") print("======================================================") print("{0:>06x} {1:>06x} {2:>06x} {3:>06x} {4:>06x} {5:>06x} {6:>06x} {7:>06x}".format(*[i for i in SecLen[1:9]])) S1: S2: S3: S4: S5: S6: S7: S8: ====================================================== 0decd1 16b6eb 16b7ff 16bd63 134be3 000000 07ffff 000000 LG Markus
Hi Markus. Es geht auch noch etwas flexibler:
1 | ''.join(['{{{0}:>6X}}'.format(x) for x in range(len(SceLen))]).format(*SceLen) |
Viele Grüße Falk
Markus W. schrieb: > [i for i in SecLen[1:9]] ist das nicht ein bisschen doppelt gemoppelt? einfach nur SecLen[1:9] hinschreiben würde doch reichen?
Oder so:
1 | SecLen = [912593, 1488619, 1488895, 1490275, 1264611, 0, 524287, 0] |
2 | n = len(SecLen) |
3 | print(' '.join(map(' S{:d}: '.format, range(n)))) |
4 | print((7*n-1) * '=') |
5 | print(' '.join(map('{:06x}'.format, SecLen))) |
Ausgabe:
1 | S0: S1: S2: S3: S4: S5: S6: S7: |
2 | ======================================================= |
3 | 0decd1 16b6eb 16b7ff 16bd63 134be3 000000 07ffff 000000 |
Danke für alle Vorschläge. Mein Skript im Anhang. Bestimmt besteht noch Verbesserungspotential. Wer die Zeit erübrigen kann und will, der darf gerne optimieren. Vielleicht inspiriert es den einen oder anderen. Ich bin wohl gemerkt kein Python-Experte, hoffe aber es demnächst zu werden ;-) Markus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.