Подтвердить что ты не робот

Как удалить ведущие и завершающие нули в строке? питон

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

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-n00000','alphanumeric0000', '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)
4b9b3361

Ответ 1

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

your_string.strip("0")

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

[Дополнительная информация в doc.]

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

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

Удалить ведущий + трейлинг "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 ]

Ответ 3

Пробовал ли вы strip():

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

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

Ответ 4

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

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

   number = int(number)

else:

   number = float(number)

Ответ 5

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" среди других элементов, которые удовлетворяют предикату. Этот инструмент не ограничивается строками. Подробнее см. в документах.