Bir dizedeki baştaki ve sondaki sıfırlar nasıl kaldırılır? Python


110

Bunun gibi birkaç alfanümerik dizim var

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

Sondaki sıfırları kaldırmak için istenen çıktı şu olacaktır:

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

İçin arzu edilen çıkış gelen sondaki sıfırlar olacaktır:

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

Baştaki ve sondaki sıfırları kaldırmak için arzu çıktısı şöyle olacaktır:

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

Şimdilik bunu şu şekilde yapıyorum, lütfen varsa daha iyi bir yol önerin:

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)

Yanıtlar:


238

Peki ya temel

your_string.strip("0")

hem sondaki hem de baştaki sıfırları kaldırmak için? Yalnızca sondaki sıfırları kaldırmakla ilgileniyorsanız, .rstripbunun yerine kullanın (ve .lstripyalnızca baştaki olanlar için).

[ Dokümanda daha fazla bilgi .]

İstediğiniz dizileri elde etmek için bazı liste anlama özelliğini kullanabilirsiniz:

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]

2
Özel durumu için bu cevap için akıllıca bir ayarlama var mı s = '0'?
Charles

8
@Charles: Evet! Ben de aynı problemi yaşadım ve yapabilirsiniz s.strip("0") or "0": False"0"
dizeniz

@Pierre GM Teşekkürler. Gerçekten yardımcı oluyor ve çok basit. Buna olumlu oy verildi
Vishav Gupta

18

Baştaki + sondaki '0'ı kaldırın:

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

Baştaki '0'ı kaldırın:

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

Sondaki '0'ı kaldırın:

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

Cevabınız için teşekkürler. Gerçekten yardımcı oluyor. Buna olumlu oy verdim
Vishav Gupta

7

Bunu basitçe bir bool ile yapabilirsiniz:

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

   number = int(number)

else:

   number = float(number)

2
alphanumeric0000OP'nin talep ettiği şekilde çalışmıyor .
Karl Richter

4

Strip () ile denediniz mi :

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

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

1

str.stripbu durum için en iyi yaklaşımdır, ancak more_itertools.stripaynı zamanda hem baştaki hem de sondaki öğeleri yinelenebilirden çıkaran genel bir çözümdür:

Kod

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

Detaylar

Dikkat edin, burada "0"bir yüklemi karşılayan diğer öğeler arasında hem öndeki hem de sondaki URL'leri kaldırıyoruz. Bu araç dizelerle sınırlı değildir.

Daha fazla örnek için dokümanlara da bakın

more_itertoolsüzerinden yüklenebilen bir üçüncü taraf kitaplığıdır > pip install more_itertools.


1

Listenizde başka veri türlerinin (ve yalnızca dizenin değil) olduğunu varsayarsak, bunu deneyin. Bu, dizelerden sondaki ve baştaki sıfırları kaldırır ve diğer veri türlerine dokunulmaz. Bu aynı zamanda s = '0' özel durumunu da işler.

Örneğin

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.