2012-10-30 17 views
59

Mam kilka ciągów alfanumerycznych jak teJak usunąć początkowe i końcowe zera w ciągu znaków? Python

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

sygnał wyjściowy do usuwania końcowe zera byłoby:

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

Pożądana wyjście wiodących zera kończące byłoby:

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

Pożądanie wkładać do usuwania zarówno wiodące i końcowe zera byłoby:

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

Na razie Robiłem to w następujący sposób, proszę sugerują lepszy sposób, jeżeli istnieje:

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) 

Odpowiedz

123

co z podstawowym

your_string.strip("0") 

usunięcie zer końcowych i początkowych? Jeśli chcesz usunąć zerowanie końcowe, zamiast tego użyj .rstrip (i .lstrip tylko dla wiodących).

[Więcej informacji w doc.]

Można użyć trochę listowych, aby uzyskać sekwencje chcesz tak:

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

Czy istnieje jakaś sprytna regulacja dla tej odpowiedzi dla szczególnego przypadku 's = '0''? – Charlie

3

Próbowałeś z strip():

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

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

Usuń wiodące + końcowe "0":

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

usuwania początku '0':

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

Usuwanie początkowych '0':

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

Można po prostu zrobić to z bool:

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

    number = int(number) 

else: 

    number = float(number) 
+0

Nie działa z 'alphanumeric0000' jako żądanym OP. –

0

strip jest najlepszy podejście do tej sytuacji, ale more_itertools.strip jest ogólnym rozwiązaniem, które usuwa elementy wiodące i końcowe z iterowalnego:

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

Wskazówki, tu rozebrać zarówno początkowe i końcowe "0" s pośród innych elementów, które spełniają predykat. To narzędzie nie jest ograniczone do ciągów. See docs, aby uzyskać więcej przykładów.

Powiązane problemy