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)
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]
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 ]
Vous pouvez simplement faire cela avec un bool:
if int(number) == float(number):
number = int(number)
else:
number = float(number)
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']
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.strip
: dénudez les deux extrémitésmore_itertools.lstrip
: dénudez l'extrémité gauchemore_itertools.rstrip
: dénudez l'extrémité droitemore_itertools
est une bibliothèque tierce installable via > pip install more_itertools
.