Forum: PC-Programmierung Python und Formatstring für Array


von Markus W. (dl8mby)


Lesenswert?

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.

von Bernd K. (prof7bit)


Lesenswert?


von Markus W. (dl8mby)


Lesenswert?

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

von __LC__ (Gast)


Lesenswert?

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

von Bernd K. (prof7bit)


Lesenswert?

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?

von Yalu X. (yalu) (Moderator)


Lesenswert?

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

von Markus W. (dl8mby)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.