¿Cómo eliminar los ceros iniciales y finales de una cadena? Pitón

110

Tengo varias cadenas alfanuméricas como estas

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

La salida deseada para eliminar los ceros finales sería:

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

La salida deseada para líderes ceros que se arrastran sería:

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

La salida deseada para eliminar los ceros iniciales y finales sería:

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

Por ahora lo he estado haciendo de la siguiente manera, sugiera una mejor manera si la hay:

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)
alvas
fuente

Respuestas:

238

¿Qué tal un básico

your_string.strip("0")

eliminar los ceros iniciales y finales? Si solo está interesado en eliminar los ceros finales, utilícelo .rstripen su lugar (y .lstripsolo para los primeros).

[Más información en el documento ]

Podría usar un poco de comprensión de la lista para obtener las secuencias que desea así:

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]
Pierre GM
fuente
2
¿Hay algún ajuste inteligente para esta respuesta para el caso especial de s = '0'?
Charles
7
@Charles: ¡Sí! Acabo de tener el mismo problema, y ​​puede hacerlo s.strip("0") or "0": si su cadena se convierte en la cadena vacía, se evaluará como Falsepor o y será reemplazada por la cadena deseada"0"
tarulen
@Pierre GM Gracias. Realmente ayuda y es muy simple. Voto a favor
Vishav Gupta
18

Eliminar '0' inicial + final:

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

Quite el '0' inicial:

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

Eliminar '0' final:

list = [ i.rstrip('0') for i in listOfNum ]
fho
fuente
gracias por tu respuesta. Realmente ayuda. Lo he votado a favor
Vishav Gupta
7

Simplemente puede hacer esto con un bool:

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

   number = int(number)

else:

   number = float(number)
Bjarne
fuente
2
No funciona con alphanumeric0000OP solicitado.
Karl Richter
4

Intentaste con strip () :

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

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

str.stripes el mejor enfoque para esta situación, pero more_itertools.striptambién es una solución general que elimina los elementos iniciales y finales de un iterable:

Código

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

Detalles

Observe que aquí eliminamos las "0"s iniciales y finales entre otros elementos que satisfacen un predicado. Esta herramienta no se limita a cadenas.

Consulte también la documentación para obtener más ejemplos de

more_itertoolses una biblioteca de terceros que se puede instalar a través de > pip install more_itertools.

pylang
fuente
1

Suponiendo que tiene otros tipos de datos (y no solo cadenas) en su lista, intente esto. Esto elimina los ceros iniciales y finales de las cadenas y deja intactos otros tipos de datos. Esto también maneja el caso especial s = '0'

p.ej

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