153 votes

Comment supprimer les zéros de tête et de queue dans une chaîne de caractères ? Python

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

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

Le résultat souhaité pour la suppression suivi de les zéros seraient :

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

La sortie souhaitée pour leader les zéros de fin seraient :

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

La sortie souhaitée pour la suppression des zéros de tête et de queue serait la suivante :

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

Pour l'instant, j'ai procédé de la manière suivante. S'il y a une meilleure méthode, suggérez-la :

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)

323voto

Pierre GM Points 7792

Qu'en est-il d'une base

your_string.strip("0")

pour supprimer les zéros de tête et de queue ? Si vous souhaitez uniquement supprimer les zéros de fin, utilisez la fonction .rstrip à la place (et .lstrip pour seulement les principaux d'entre eux).

Plus d'informations dans le doc.

Vous pourriez utiliser la 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]

19voto

fho Points 128

Supprimer le "0" de tête et de queue :

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

Supprimer le "0" de tête :

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

Supprimez le "0" qui suit :

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

9voto

Bjarne Points 99

Vous pouvez simplement faire cela avec un bool :

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

   number = int(number)

else:

   number = float(number)

4voto

Cédric Julien Points 24177

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']

3voto

escha Points 47

En supposant que vous avez d'autres types de données (et pas seulement des chaînes) dans votre liste, essayez ceci. Cela supprime les zéros de fin et de début des chaînes de caractères et ne touche pas aux autres types de données. Elle gère également le cas particulier s = '0'.

Par exemple

a = ['001', '200', 'akdl00', 200, 100, '0']

b = [(lambda x: x.strip('0') if isinstance(x,str) and len(x) != 1 else x)(x) for x in a]

b
>>>['1', '2', 'akdl', 200, 100, '0']

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X