Comment faire pour imprimer une chaîne de caractères à largeur fixe?
J'ai ce code (impression de la survenance de l'ensemble des permutations dans une chaîne de caractères)
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));
Je veux imprimer tous la permutation occurrence, il est dans la chaîne de grandeur.
depuis la permutation ne sont pas de la même longueur que je veux fixer la largeur et de l'imprimer dans un joli pas comme celui-ci:
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
Comment puis-je utiliser format
de le faire?
J'ai trouvé ces postes, mais il ne vont pas bien avec chaînes alphanumériques:
python mise en forme de chaîne de largeur fixe
Réglage de longueur fixe avec python
- qu'en print "%10s' % 'machaine'
- Surpris que
"\t"
n'est pas répertorié comme une option dans n'importe quelle solution.
Vous devez vous connecter pour publier un commentaire.
MODIFIER 2013-12-11 - Cette réponse est très ancienne. Elle est toujours valable et correcte, mais les gens regardant cela devrait préférer la nouveau format de la syntaxe.
Vous pouvez utiliser mise en forme de chaîne comme ceci:
En gros:
%
caractère informe python il faudra les remplacer par quelque chose d'un jetons
caractère informe python le jeton sera une chaîne5
(ou quel que soit le nombre que vous souhaitez) informe python pour le pad de la chaîne avec des espaces jusqu'à 5 caractères.Dans votre cas particulier une possible mise en œuvre pourrait ressembler à:
NOTE de CÔTÉ: me demandais si vous êtes au courant de l'existence de la
itertools
module. Par exemple, vous pouvez obtenir une liste de tous vos combinaisons en une seule ligne avec:et vous pourriez obtenir le nombre d'occurrences en utilisant
combinations
en conjonction aveccount()
.- Je trouver de l'aide
str.format
beaucoup plus élégant:Si vous souhaitez aligner la chaîne à la bonne utilisation
>
au lieu de<
:Edit:
Comme mentionné dans les commentaires: le 0 indique que l'argument de l'index passé à
str.format()
.'{<5}'.format('ss')
'ss '
tout comme avant, mais sans le 0, fait la même chose ou'Second {1: <5} and first {0: <5}'.format('ss', 'sss')
'Second sss and first ss '
de sorte que vous pouvez réorganiser, voire de sortie de la même variable plusieurs fois dans une seule chaîne de sortie.{<5}
ne fonctionne pas, mais{: <5}
fonctionne sans la valeur de l'indice.{0: <5}
est le[fill]
, le<
est[align]
, et5
est[width]
>>> print width 20 >>> print "{0: <{width}}".format("ssssss", width=width).split('\n') ['ssssss '] >>>
width=10; "{0: <{1}}".format('sss', width)
. Ou même de quitter les numéros de'{: <{}}'.format('sss', width)
{0: <5}
la0
signifie que le premier argument, mais à quelle dose:
faire ici? Et je ne trouve pas le rôle de:
dans le format-spécification{0}
de la mise en forme de cet argument. C'est facultatif. Voirformat_spec
dans le Chaîne de Format de Syntaxe. À partir de la documentation: "La nom_champ est éventuellement suivie par ... un format_spec, qui est précédée par un signe deux-points ':'."Posté comme une modification à @0x90 réponse, mais il a été rejeté pour dévier le post d'origine de l'intention et de l'recommandée à la poste un commentaire ou une réponse, donc je suis, y compris le court écrire ici.
En plus de la réponse de @0x90, la syntaxe peut être plus souples, en utilisant une variable de la largeur (comme par @user2763554 commentaire):
En outre, vous pouvez faire de cette expression plus brève, en utilisant uniquement des nombres et en s'appuyant sur l'ordre des arguments passés à
format
:Ou même de quitter tous les nombres pour les maximale, potentiellement non-pythonically implicite, compacité:
Mise à jour 2017-05-26
Avec l'introduction de mise en forme des littéraux de chaîne ("f-cordes" pour faire court) en Python 3.6, il est maintenant possible d'accéder à des variables précédemment définies avec une plus courte durée de la syntaxe:
Cela s'applique également à la mise en forme de chaîne
format
est certainement la façon la plus élégante, mais autant que je sache, vous ne pouvez pas l'utiliser avec pythonlogging
module, donc voici comment vous pouvez le faire en utilisant le%
mise en forme:Ici, le
-
indique à gauche de l'alignement, et le nombre avants
indique la largeur fixe.Quelques exemples de sortie:
Plus d'info sur la doc ici: https://docs.python.org/2/library/stdtypes.html#string-formatting-operations