web-dev-qa-db-fra.com

Utilisation de Python Formatage de chaîne avec des listes

Je construis une chaîne s dans Python 2.6.5 qui aura un nombre variable de jetons %s, qui correspondent au nombre d'entrées dans la liste x. J'ai besoin d'écrire une chaîne formatée. Ce qui suit ne fonctionne pas, mais indique ce que j'essaie de faire. Dans cet exemple, il y a trois jetons %s et la liste comporte trois entrées.

s = '%s BLAH %s FOO %s BAR'
x = ['1', '2', '3']
print s % (x)

J'aimerais que la chaîne de sortie soit:

1 BLAH 2 FOO 3 BAR

90
SabreWolfy
print s % Tuple(x)

au lieu de

print s % (x)
101
infrared

Vous devriez jeter un oeil à la méthode format de python. Vous pouvez ensuite définir votre chaîne de mise en forme comme ceci:

>>> s = '{0} BLAH {1} BLAH BLAH {2} BLAH BLAH BLAH'
>>> x = ['1', '2', '3']
>>> print s.format(*x)
'1 BLAH 2 BLAH BLAH 3 BLAH BLAH BLAH'
133
Cédric Julien

Après ceci page de ressource , si la longueur de x varie, nous pouvons utiliser:

', '.join(['%.2f']*len(x))

créer un espace réservé pour chaque élément de la liste x. Voici l'exemple:

x = [1/3.0, 1/6.0, 0.678]
s = ("elements in the list are ["+', '.join(['%.2f']*len(x))+"]") % Tuple(x)
print s
>>> elements in the list are [0.33, 0.17, 0.68]
24
neobot

Comme je viens d’apprendre ce truc sympa (indexation dans des listes à partir d’une chaîne de formatage), j’ajoute à cette vieille question.

s = '{x[0]} BLAH {x[1]} FOO {x[2]} BAR'
x = ['1', '2', '3']
print s.format (x=x)

Cependant, je n'ai toujours pas trouvé comment découper (à l'intérieur de la chaîne de format '"{x[2:4]}".format...,) et j'aimerais bien savoir si quelqu'un a une idée, mais je soupçonne que vous ne pouvez tout simplement pas le faire.

16
Joran Beasley

Voici une ligne. Une petite réponse improvisée à l’utilisation du format print () sur une liste.

Que diriez-vous de ceci: (python 3.x)

sample_list = ['cat', 'dog', 'bunny', 'pig']
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list))

Lisez la documentation ici en utilisant format () .

11
geekidharsh

C'était une question amusante! Une autre façon de gérer ceci pour les listes de longueur variable est de construire une fonction qui tire pleinement parti de la méthode .format et de la décompression de la liste. Dans l'exemple suivant, je n'utilise pas de formatage sophistiqué, mais cela peut facilement être modifié pour répondre à vos besoins.

list_1 = [1,2,3,4,5,6]
list_2 = [1,2,3,4,5,6,7,8]

# Create a function that can apply formatting to lists of any length:
def ListToFormattedString(alist):
    # Create a format spec for each item in the input `alist`.
    # E.g., each item will be right-adjusted, field width=3.
    format_list = ['{:>3}' for item in alist] 

    # Now join the format specs into a single string:
    # E.g., '{:>3}, {:>3}, {:>3}' if the input list has 3 items.
    s = ','.join(format_list)

    # Now unpack the input list `alist` into the format string. Done!
    return s.format(*alist)

# Example output:
>>>ListToFormattedString(list_1)
'  1,  2,  3,  4,  5,  6'
>>>ListToFormattedString(list_2)
'  1,  2,  3,  4,  5,  6,  7,  8'
9
Matt P