1
votes

Supprimer un élément d'une chaîne

J'ai une liste dans laquelle j'ajoute des éléments comme celui-ci:

    Paris
    Amsterdam 
    New York City
    L.A

donc listA ressemble à ceci:

for i in listA:
    listB.append(i - str(code))   #that's what i want to do. The code is not good

Je voudrais , maintenant à partir de cette listeA, pour ajouter des éléments à une liste "listB", sans le code. Je voudrais faire ceci:

Paris          75
Amsterdam      120
New York City  444 
L.A            845

et je veux que la listB ressemble à ceci:

listA.append('{:<30s} {:>10s}'.format(element, str(code)))

et en utilisant uniquement listA et sans avoir accès à 'element' et 'code'

Quelqu'un peut-il m'aider?


6 commentaires

Je n'ai pas tout à fait compris, besoin de clarification


Vous n'utilisez pas du tout i dans la deuxième boucle. D'où viennent l ' élément et le code ?


Il semble que vous cherchiez probablement ceci: Comment supprimer des sous-chaînes spécifiques ... en Python


Je ne suis pas sûr de bien vous comprendre, mais pourquoi ne construisez-vous pas listB juste après avoir construit listA, quelque chose comme - listB.append (élément)?


@MilanCermak je change de message


@IftahP parce que ce n'est qu'un exemple. dans mon projet, je n'ai plus accès à «élément» et «code». J'ai juste accès à la liste A déjà faite


6 Réponses :


2
votes

Vous pouvez utiliser l'expression régulière pour cela

import re

for i in listA:
    listB.append(re.sub(r"\W+\d+", "", i))

Cela supprimera le code qui est des nombres et les espaces avant.


0 commentaires

2
votes

Essayez ceci:

['Paris', 'Amsterdam', 'New York City', 'L.A']

Résultat:

import re
listB = [re.sub('\d+', '', x).strip() for x in listA]
print(listB)


0 commentaires

0
votes

Cela semble fonctionner pour moi

listB=[]
for i in listA:
    listB.append(listA[0][:len(element)])
print(listB)


0 commentaires

0
votes

Que diriez-vous d'utiliser re.sub ? Et au lieu d'utiliser for in , il serait préférable de map style fonctionnel ou [for in] compréhension de liste:

import re
listB = [re.sub(r"\s+\d+", "", x) for x in listA]
  • re.sub - est une fonction qui recherche et supprime toutes les occurrences du premier argument au deuxième au troisième
  • r "\ s + \ d +" - est un Chaîne littérale 'brute' avec regex à l'intérieur
  • \ s + - un ou plusieurs espaces ( \ t \ n \ r etc)
  • \ d + - un ou plusieurs chiffres ( \ d est un allias pour [0-9] )
  • Pour plus d'informations sur les expressions régulières, utilisez cette page de documentation a>


0 commentaires

0
votes

Le moyen le plus simple sans aucune nouvelle bibliothèque.

Vous pouvez créer une variable avec 40 espaces (à cause de 40 espaces dans la clause de format). par exemple: space_var = "" Ensuite, utilisez le code suivant pour extraire l'élément de listA:

listB=[]
for i in listA:
    listB.append(listA[0].rsplit(space_var,1)[0])


0 commentaires

0
votes

Vous pouvez essayer ce qui suit:

listB = [element.rsplit(' ', maxsplit=1)[0].rstrip() for element in listA]

rsplit ('', maxsplit = 1) signifie que vous diviserez l'élément de listA une fois au premier espace du côté droit. rstrip () supplémentaire supprimera les autres espaces du côté droit.


0 commentaires