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

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

Donc listA ressemble à ceci:

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

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

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

Et je veux que la listB ressemble à ceci:

    Paris
    Amsterdam 
    New York City
    L.A

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

Quelqu'un peut-il m'aider?

0
Isoka05m 16 juin 2020 à 11:09

6 réponses

Meilleure réponse

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 devant lui.

2
Leo Arad 16 juin 2020 à 08:19

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. Un rstrip() supplémentaire supprimera les autres espaces du côté droit.

0
Paweł Müller 16 juin 2020 à 08:28

Et si vous utilisiez 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 = list(map(lambda x: re.sub(r"\s+\d+", "", x), listA))

Ou, encore mieux

import re
listB = [re.sub(r"\s+\d+", "", x) for x in listA]

Un peu de regex:

  • 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 une chaîne "brute" littéral avec regex à l'intérieur
  • \s+ - un ou plusieurs espaces (\t\n\r etc.)
  • \d+ - un ou plusieurs chiffres (\d est un alias pour [0-9])
  • Pour plus d'informations sur les regex, utilisez cette page de documentation
0
Deerenaros 16 juin 2020 à 08:30

Essaye ça:

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

Sortie:

['Paris', 'Amsterdam', 'New York City', 'L.A']
2
komatiraju032 16 juin 2020 à 08:19

Le moyen le plus simple sans nouvelles bibliothèques.

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
DavideBrex 16 juin 2020 à 11:54

Cela semble fonctionner pour moi

listB=[]
for i in listA:
    listB.append(listA[0][:len(element)])
print(listB)
0
maria_g 16 juin 2020 à 08:20