Ich habe diesen Code (Drucken des Auftretens aller Permutationen in einer Zeichenfolge)
def splitter(str):
for i in range(1, len(str)):
start = str[0:i]
end = str[i:]
yield (start, end)
for split in splitter(end):
result = [start]
result.extend(split)
yield result
el =[];
string = "abcd"
for b in splitter("abcd"):
el.extend(b);
unique = sorted(set(el));
for prefix in unique:
if prefix != "":
print "value " , prefix , "- num of occurrences = " , string.count(str(prefix));
Ich möchte das gesamte Permutationsvorkommen drucken, das in einer variablen Zeichenfolge vorhanden ist.
Da die Permutation nicht die gleiche Länge hat, möchte ich die Breite korrigieren und in einer schönen Form drucken, die nicht so ist:
value a - num of occurrences = 1
value ab - num of occurrences = 1
value abc - num of occurrences = 1
value b - num of occurrences = 1
value bc - num of occurrences = 1
value bcd - num of occurrences = 1
value c - num of occurrences = 1
value cd - num of occurrences = 1
value d - num of occurrences = 1
Wie kann ich format
das machen?
Ich habe diese Beiträge gefunden, aber es passte nicht gut zu alphanumerischen Zeichenfolgen:
python
python-2.7
format
0x90
quelle
quelle
"\t"
in keiner Lösung als Option aufgeführt ist.Antworten:
EDIT 2013-12-11 - Diese Antwort ist sehr alt. Es ist immer noch gültig und korrekt, aber Leute, die sich das ansehen, sollten die neue Formatsyntax bevorzugen .
Sie können die Zeichenfolgenformatierung wie folgt verwenden:
Grundsätzlich:
%
Charakter informiert Python, dass er einen Token durch etwas ersetzen musss
Zeichen informiert Python, dass das Token eine Zeichenfolge sein wird5
(oder eine beliebige Zahl) weist Python an, die Zeichenfolge mit Leerzeichen von bis zu 5 Zeichen aufzufüllen.In Ihrem speziellen Fall könnte eine mögliche Implementierung folgendermaßen aussehen:
SEITLICHER HINWEIS: Ich habe mich nur gefragt, ob Ihnen die Existenz des
itertools
Moduls bekannt ist . Zum Beispiel könnten Sie eine Liste aller Ihrer Kombinationen in einer Zeile erhalten mit:und Sie könnten die Anzahl der Vorkommen erhalten, indem Sie
combinations
in Verbindung mit verwendencount()
.quelle
Ich finde die Verwendung
str.format
viel eleganter:Wenn Sie die Zeichenfolge richtig ausrichten möchten, verwenden Sie
>
anstelle von<
:Bearbeiten: Wie in den Kommentaren erwähnt: Die 0 gibt den Index des Arguments an, an das übergeben wurde
str.format()
.quelle
'{<5}'.format('ss')
'ss '
Wie zuvor, jedoch ohne die 0,'Second {1: <5} and first {0: <5}'.format('ss', 'sss')
'Second sss and first ss '
können Sie dieselbe Variable mehrmals in einer einzelnen Ausgabe neu anordnen oder sogar ausgeben Zeichenfolge.{<5}
funktioniert nicht, aber{: <5}
ohne den Indexwert.{0: <5}
der[fill]
, der<
ist[align]
und5
ist[width]
>>> print width 20 >>> print "{0: <{width}}".format("ssssss", width=width).split('\n') ['ssssss '] >>>
width=10; "{0: <{1}}".format('sss', width)
. Oder lassen Sie sogar die Zahlen'{: <{}}'.format('sss', width)
Ursprünglich als Bearbeitung der Antwort von @ 0x90 veröffentlicht, wurde sie jedoch abgelehnt, weil sie von der ursprünglichen Absicht des Beitrags abwich, und empfohlen, sie als Kommentar oder Antwort zu veröffentlichen. Daher füge ich hier die kurze Beschreibung hinzu.
Zusätzlich zur Antwort von @ 0x90 kann die Syntax flexibler gestaltet werden, indem eine Variable für die Breite verwendet wird (gemäß dem Kommentar von @ user2763554):
Außerdem können Sie diesen Ausdruck kürzer machen, indem Sie nur Zahlen verwenden und sich auf die Reihenfolge der Argumente verlassen, die an Folgendes übergeben werden
format
:Oder lassen Sie sogar alle Zahlen für maximale, möglicherweise nicht pythonisch implizite Kompaktheit weg:
Update 2017-05-26
Mit der Einführung formatierter String-Literale (kurz "f-Strings") in Python 3.6 ist es jetzt möglich, auf zuvor definierte Variablen mit einer kürzeren Syntax zuzugreifen:
Dies gilt auch für die Formatierung von Zeichenfolgen
quelle
format
ist definitiv der eleganteste Weg, aber afaik kann man das nicht mit dem Python-logging
Modul verwenden, also hier ist, wie man es mit der%
Formatierung machen kann:Hier zeigt das
-
die linke Ausrichtung an, und die Zahl davors
gibt die feste Breite an.Einige Beispielausgaben:
Weitere Informationen finden Sie in den Dokumenten hier: https://docs.python.org/2/library/stdtypes.html#string-formatting-operations
quelle
'%(name)20.20s'
die 20 als minimale und maximale Saitenlänge!quelle