web-dev-qa-db-fra.com

Comment supprimer les zéros de début et de fin dans une chaîne? Python

J'ai plusieurs chaînes alphanumériques comme celles-ci

listOfNum = ['000231512-n','1209123100000-n00000','alphanumeric0000', '000alphanumeric']

La sortie souhaitée pour supprimer fin zéros serait:

listOfNum = ['000231512-n','1209123100000-n','alphanumeric', '000alphanumeric']

La sortie souhaitée pour interligne zéros à la fin serait:

listOfNum = ['231512-n','1209123100000-n00000','alphanumeric0000', 'alphanumeric']

Le résultat souhaité pour supprimer les zéros de début et de fin serait le suivant:

listOfNum = ['231512-n','1209123100000-n00000','alphanumeric0000', 'alphanumeric']

Pour le moment, je le fais de la manière suivante, veuillez suggérer un meilleur moyen s’il existe:

listOfNum = ['000231512-n','1209123100000-n00000','alphanumeric0000', \
'000alphanumeric']
trailingremoved = []
leadingremoved = []
bothremoved = []

# Remove trailing
for i in listOfNum:
  while i[-1] == "0":
    i = i[:-1]
  trailingremoved.append(i)

# Remove leading
for i in listOfNum:
  while i[0] == "0":
    i = i[1:]
  leadingremoved.append(i)

# Remove both
for i in listOfNum:
  while i[0] == "0":
    i = i[1:]
  while i[-1] == "0":
    i = i[:-1]
  bothremoved.append(i)
85
alvas

Qu'en est-il d'une base

your_string.strip("0")

supprimer les zéros à la fin et au début? Si vous souhaitez uniquement supprimer les zéros à la fin, utilisez .rstrip à la place (et .lstrip seulement pour les premiers).

[Plus d'infos dans le doc .]

Vous pouvez utiliser une compréhension de liste pour obtenir les séquences que vous voulez comme ceci:

trailing_removed = [s.rstrip("0") for s in listOfNum]
leading_removed = [s.lstrip("0") for s in listOfNum]
both_removed = [s.strip("0") for s in listOfNum]
186
Pierre GM

Supprimer le '0' précédant + suivant:

list = [i.strip('0') for i in listOfNum ]

Supprimer le '0' initial:

list = [ i.lstrip('0') for i in listOfNum ]

Supprimer le '0' suivant:

list = [ i.rstrip('0') for i in listOfNum ]
12
fho

Vous pouvez simplement faire cela avec un bool:

if int(number) == float(number):

   number = int(number)

else:

   number = float(number)
3
Bjarne

Avez-vous essayé avec strip () :

listOfNum = ['231512-n','1209123100000-n00000','alphanumeric0000', 'alphanumeric']
print [item.strip('0') for item in listOfNum]

>>> ['231512-n', '1209123100000-n', 'alphanumeric', 'alphanumeric']
3
Cédric Julien

str.strip est la meilleure approche pour cette situation, mais more_itertools.strip est également une solution générale qui supprime les éléments de début et de fin d’un itératif:

Code

import more_itertools as mit


iterables = ["231512-n\n","  12091231000-n00000","alphanum0000", "00alphanum"]
pred = lambda x: x in {"0", "\n", " "}
list("".join(mit.strip(i, pred)) for i in iterables)
# ['231512-n', '12091231000-n', 'alphanum', 'alphanum']

Détails

Remarquez, ici, nous enlevons les caractères de tête et de queue "0"s parmi d'autres éléments qui satisfont un prédicat. Cet outil n'est pas limité aux chaînes.

Voir aussi la documentation pour plus d'exemples de

more_itertools est une bibliothèque tierce installable via > pip install more_itertools.

1
pylang