J'ai ce code (impression de l'occurrence de toutes les permutations dans une chaîne)
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 toutes les occurrences de permutation qu'il y a dans la chaîne varaible.
comme la permutation n'est pas de la même longueur, je veux fixer la largeur et 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
pour le faire?
J'ai trouvé ces articles mais cela ne s'est pas bien passé avec les chaînes alphanumériques:
python
python-2.7
format
0x90
la source
la source
"\t"
n'est répertorié comme une option dans aucune solution.Réponses:
EDIT 2013-12-11 - Cette réponse est très ancienne. Il est toujours valide et correct, mais les personnes qui l'examinent devraient préférer la nouvelle syntaxe de format .
Vous pouvez utiliser un formatage de chaîne comme celui-ci:
Fondamentalement:
%
personnage informe python qu'il devra remplacer quelque chose par un jetons
caractère informe python que le jeton sera une chaîne5
(ou le nombre que vous souhaitez) informe python de remplir la chaîne avec des espaces jusqu'à 5 caractères.Dans votre cas spécifique, une implémentation possible pourrait ressembler à:
REMARQUE: Je me suis simplement demandé si vous étiez conscient de l'existence du
itertools
module . Par exemple, vous pouvez obtenir une liste de toutes vos combinaisons sur une seule ligne avec:et vous pouvez obtenir le nombre d'occurrences en utilisant
combinations
conjointement aveccount()
.la source
Je trouve l'utilisation
str.format
beaucoup plus élégante:Si vous souhaitez aligner la chaîne sur la bonne utilisation
>
au lieu de<
:Edit: Comme mentionné dans les commentaires: le 0 indique l'index de l'argument passé à
str.format()
.la source
'{<5}'.format('ss')
'ss '
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 '
vous pouvez réorganiser ou même afficher la même variable plusieurs fois dans une seule sortie chaîne.{<5}
ne fonctionne pas, mais{: <5}
fonctionne sans la valeur d'index.{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'{: <{}}'.format('sss', width)
Publié à l'origine en tant que modification de la réponse de @ 0x90, mais il a été rejeté pour avoir dévié de l'intention d'origine de la publication et recommandé de le publier en tant que commentaire ou réponse, j'inclus donc la courte description ici.
En plus de la réponse de @ 0x90, la syntaxe peut être rendue plus flexible, en utilisant une variable pour la largeur (selon le commentaire de @ user2763554):
De plus, vous pouvez rendre cette expression plus brève, en utilisant uniquement des nombres et en vous basant sur l'ordre des arguments passés à
format
:Ou même omettre tous les nombres pour une compacité maximale, potentiellement non pythoniquement implicite:
Mise à jour 26/05/2017
Avec l'introduction de chaînes littérales formatées ("f-strings" pour faire court) dans Python 3.6, il est désormais possible d'accéder à des variables précédemment définies avec une syntaxe plus brève:
Cela s'applique également au formatage des chaînes
la source
format
est certainement le moyen le plus élégant, mais afaik que vous ne pouvez pas l'utiliser avec lelogging
module de python , alors voici comment vous pouvez le faire en utilisant le%
formatage:Ici, le
-
indique l'alignement à gauche et le nombre avants
indique la largeur fixe.Quelques exemples de sortie:
Plus d'informations dans la documentation ici: https://docs.python.org/2/library/stdtypes.html#string-formatting-operations
la source
'%(name)20.20s'
qui définit 20 à la fois comme longueur de chaîne minimale et maximale!la source