Как удалить начальные и конечные нули в строке? Python


110

У меня есть несколько таких буквенно-цифровых строк

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

Желаемый результат для удаления конечных нулей будет:

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

Желаемый результат для начальных конечных нулей будет:

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

Желаемый результат удаления начальных и конечных нулей будет:

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

Пока я делаю это следующим образом, пожалуйста, предложите лучший способ, если он есть:

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)

Ответы:


238

А как насчет базового

your_string.strip("0")

удалить как завершающие, так и ведущие нули? Если вас интересует только удаление завершающих нулей, используйте .rstripвместо них (и .lstripтолько для первых).

[Подробнее в документе ]

Вы можете использовать некоторое понимание списка, чтобы получить нужные вам последовательности:

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
Есть ли какая-нибудь умная корректировка этого ответа для особого случая s = '0'?
Чарльз

8
@ Чарльз: Да! У меня была такая же проблема, и вы можете это сделать s.strip("0") or "0": если ваша строка превращается в пустую строку, она будет оцениваться как Falseили и будет заменена на нужную строку"0"
tarulen

@Pierre GM Спасибо. Это действительно помогает и очень просто. Проголосовал за
Вишав Гупта

18

Удалите начальный + завершающий '0':

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

Удалите ведущий "0":

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

Удалите завершающий '0':

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

спасибо за Ваш ответ. Это действительно помогает. Я поддержал его
Вишав Гупта

7

Вы можете просто сделать это с помощью bool:

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

   number = int(number)

else:

   number = float(number)

2
Не работает alphanumeric0000по запросу OP.
Карл Рихтер,

4

Вы пробовали использовать strip () :

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

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

1

str.strip- лучший подход для этой ситуации, но more_itertools.stripтакже и общее решение, которое удаляет как ведущие, так и замыкающие элементы из итерации:

Код

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

подробности

Обратите внимание, здесь мы удаляем как начальные, так и конечные "0"элементы среди других элементов, удовлетворяющих предикату. Этот инструмент не ограничивается струнами.

См. Также документы для получения дополнительных примеров

more_itertools- это сторонняя библиотека, которую можно установить через > pip install more_itertools.


1

Предполагая, что в вашем списке есть другие типы данных (и не только строка), попробуйте это. Это удаляет завершающие и ведущие нули из строк и оставляет нетронутыми другие типы данных. Это также обрабатывает особый случай s = '0'

например

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']
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.