2009-09-05 7 views
0

J'ai un filtre de liste = ['a', 'b', 'c']. J'ai besoin d'encadrer la chaîne suivante de la liste "item -un item -b item -c". Quel est le moyen le plus efficace de le faire? Habituellement, le filtre de liste contient de 100 à 200 éléments et chacun aurait une longueur de 100 à 150. Cela ne provoquerait-il pas un débordement? Et quelle est la longueur maximale de la chaîne supportée?Formatage des chaînes

+7

N'utilisez pas 'filter' comme nom de variable. "filter" est une fonction Python. –

+0

Tellement de choses sont des builtins Python qu'il est difficile de ne pas les attaquer maintenant et ensuite. Cela n'affecte généralement que le bloc de code, donc plutôt que d'essayer de mémoriser chaque nom de fonction intégré, il est relativement inoffensif d'éviter ceux que vous connaissez et utilisez, et de renommer les variables plus tard si vous en manquez un et que vous en avez besoin. –

+1

Il n'y a vraiment pas beaucoup de fonctions intégrées. Un peu plus de 80. –

Répondre

4

Un nettoyeur façon de le faire:

filter = ['a', 'b', 'c'] 
" ".join(["item -%s" % val for val in filter]) 

Cela fonctionne très bien avec de grands tableaux, par exemple. filter = ['a'*1000] * 1000.

+0

Excellente solution. Merci – Prabhu

1

Vous pouvez utiliser join (je crois join est le même en Python 3.0):

>>> l = ['a','b','c'] 
>>> print ' item -'.join([''] + l) 
>>> ' item -a item -b item -c' 

>>> print ' item -'.join([''] + l).lstrip(' ') # eat the leading space 
>>> 'item -a item -b item -c' 
+0

'' item - '' ne rejoindrait-il pas (l) 'tout aussi bien? –

+0

Vous souhaiterez probablement également réduire l'espace en trop sur le résultat. –

+1

@Dominic Rodger, oui nous pouvons couper l'espace principal. 'rejoindre (l)' ne donnera pas le résultat que veut Prabhu. La chaîne commencerait '' un élément ... ''au lieu de'' item -a ... '' –