2012-10-30 20 views
59

ho più stringhe alfanumeriche come questiCome rimuovere gli zeri iniziali e finali in una stringa? Pitone

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

L'uscita desiderato per la rimozione finali zeri sarebbe:

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

L'uscita desiderato per leader zeri finali sarebbe:

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

Il desiderio fuori mettere per la rimozione sia leader e gli zeri finali sarebbero:

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

Per ora ho fatto è il seguente modo, si prega di suggerire un modo migliore se non c'è:

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) 

risposta

123

Che dire di una base

your_string.strip("0") 

per rimuovere sia gli zeri finali che iniziali? Se ti interessa solo rimuovere gli zero finali, utilizza invece .rstrip (e .lstrip solo per i principali).

[Maggiori informazioni nel doc.]

Si potrebbe usare un po 'di lista per ottenere le sequenze che si desidera in questo modo:

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] 
+1

C'è qualche aggiustamento intelligente per questa risposta per il caso speciale di 's = '0''? – Charlie

3

Avete provato con strip():

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

>>> ['231512-n', '1209123100000-n', 'alphanumeric', 'alphanumeric'] 
6

Rimuovi prima + "0" iniziale:

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

Rimuovere principali '0':

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

Rimuovere finale '0':

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

Si può semplicemente fare questo con un bool:

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

    number = int(number) 

else: 

    number = float(number) 
+0

Non funziona con 'alphanumeric0000' come richiesto OP. –

0

strip è la migliore approccio per questa situazione, ma more_itertools.strip è una soluzione generale che rimuove gli elementi iniziali e finali da un iterabile:

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

comunicazione, qui striscia sia iniziali e finali "0" s tra altri elementi che soddisfano un predicato. Questo strumento non è limitato alle stringhe. See docs per ulteriori esempi.

Problemi correlati