2012-10-30 20 views
59

Ich habe mehrere alphanumerische Zeichenfolgen wie dieseWie werden führende und nachfolgende Nullen in einer Zeichenfolge entfernt? Python

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

Die gewünschte Ausgabe zur Entfernung nachlauf Nullen wären:

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

Die gewünschte Ausgabe für nachgestellte Nullen führen würde:

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

Der Wunsch heraus setzen zum Entfernen beide vorderen und hinteren Nullen wäre:

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

Vorerst Ich habe es die folgende Art und Weise zu tun, schlagen Sie einen besseren Weg, wenn es:

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) 

Antwort

123

Was ist mit einem Grund

your_string.strip("0") 

zum Entfernen sowohl der führenden als auch der führenden Nullen? Wenn Sie nur nachfolgende Nullen entfernen möchten, verwenden Sie stattdessen .rstrip (und .lstrip nur für die führenden).

[Weitere Informationen im doc.]

Sie eine Liste Verständnis verwenden könnten die Sequenzen Sie wie so erhalten möchten:

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

Gibt es eine clevere Einstellung für diese Antwort für den Spezialfall 's = '0''? – Charlie

3

Haben Sie versucht, mit strip():

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

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

Vorlauf + Nachlauf '0' entfernen:

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

entfernen führenden '0':

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

entfernen '0' nachlauf:

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

Sie dies einfach mit einem Bool tun können:

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

    number = int(number) 

else: 

    number = float(number) 
+0

Funktioniert nicht mit 'alphanumeric0000' als OP angefordert. –

0

strip ist die beste Ansatz für diese Situation, aber more_itertools.strip ist eine allgemeine Lösung, die führende und nachfolgende Elemente von einem iterablen Streifen:

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

Hinweis, hier abstreifen wir sowohl führende und "0" s unter anderen Elementen Hinter, die ein Prädikat erfüllen. Dieses Werkzeug ist nicht auf Zeichenfolgen beschränkt. See docs für weitere Beispiele.