Как убрать незначащие нули в python
Перейти к содержимому

Как убрать незначащие нули в python

  • автор:

Remove Leading Zeros in Python String

Remove Leading Zeros in Python String

The removal of leading or trailing zeros is essential when data processing is performed, and the data has to be passed forward. A stray 0 might get attached to the string while it is transferred from one place to another, and it is recommended to remove it as it is unnecessary and inconvenient.

This tutorial demonstrates the several ways available to remove leading zeros in a string in Python.

Use Iteration Statements to Remove Leading Zeros in a String in Python

The simplest and most basic way to remove leading zeros in a string in Python is to remove them using iteration statements manually. Here, we manually create a code using a for loop along with the while loop to make a program that removes leading zeros in a string in Python.

The following code uses the for loop to remove leading zeros in a string in Python.

The above code provides the following output:

In the above code, we use two iteration statements, a for loop and a while loop, the latter being nested within the former. Finally, we append the newly created list and then display it after making the necessary changes.

Use the lstrip() Function Along With List Comprehension to Remove Leading Zeros in a String in Python

The lstrip() can be utilized to remove the leading characters of the string if they exist. By default, a space is the leading character to remove in the string.

List comprehension is a relatively shorter and very graceful way to create lists that are to be formed based on given values of an already existing list.

We can combine these two things and use them in our favor.

The following code uses the lstrip() function along with the list comprehension to remove leading zeros in a string in Python.

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

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

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

Выход желания для удаления как начальных, так и конечных нулей будет:

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

7 ответы

Что насчет базового

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

Больше информации в Док.

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

Есть ли какая-то умная корректировка этого ответа для особого случая s = ‘0’ ? — Чарльз

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

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

Удалить начальный + конечный «0»:

Удалить ведущий «0»:

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

ответ дан 30 окт ’12, 15:10

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

ответ дан 05 мар ’16, в 13:03

Не работает с alphanumeric0000 как просил ОП. — Калле Рихтер

ответ дан 30 окт ’12, 15:10

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

ответ дан 24 окт ’19, 21:10

pandas также предлагаем удобный способ:

Первый даст, например:

Это может быть более удобно при работе с DataFrames

ответ дан 14 окт ’21, 17:10

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

Code

Подробнее

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

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

    : зачистите оба конца : зачистить левый конец : зачистите правый конец

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

How to remove leading and trailing zeros in a string? Python

The desired output for removing trailing zeros would be:

The desired output for leading trailing zeros would be:

The desire output for removing both leading and trailing zeros would be:

For now i’ve been doing it the following way, please suggest a better way if there is:

7 Answers 7

What about a basic

to remove both trailing and leading zeros ? If you’re only interested in removing trailing zeros, use .rstrip instead (and .lstrip for only the leading ones).

More info in the doc.

You could use some list comprehension to get the sequences you want like so:

ᴇɴᴅᴇʀᴍᴀɴ's user avatar

Remove leading + trailing ‘0’ :

Remove leading ‘0’ :

Remove trailing ‘0’ :

alper's user avatar

You can simply do this with a bool:

alper's user avatar

Did you try with strip() :

Assuming you have other data types (and not only string) in your list try this. This removes trailing and leading zeros from strings and leaves other data types untouched. This also handles the special case s = ‘0’

pandas also propose a convenient method :

The first one would give, for instance :

This might be more convenient when working with DataFrames

linog's user avatar

str.strip is the best approach for this situation, but more_itertools.strip is also a general solution that strips both leading and trailing elements from an iterable:

Code

Details

Notice, here we strip both leading and trailing «0» s among other elements that satisfy a predicate. This tool is not limited to strings.

See also docs for more examples of

    : strip both ends : strip the left end : strip the right end

more_itertools is a third-party library installable via > pip install more_itertools .

Простой GUI калькулятор на Python #2. Основной функционал

Штош. В прошлой статье мы сделали дизайн калькулятора. Ну а зачем нам этот голый дизайн без функционала, правильно?

Импортируем библиотеки, следуя стилю PEP 8:

Напишем дефолтный код для запуска любого Qt приложения с файлом дизайна. Если вам хочется подробнее узнать о работе каждой строчки кода, приглашаю посетить документацию.

Если у вас не установлен в систему шрифт Rubik, то в вашем приложении шрифт будет дефолтным. Для решения этой проблемы не нужно устанавливать шрифт в систему. Импортируем:

Теперь используем метод добавления шрифта приложения, в который передадим файл шрифта. Я сделал это в конструкторе класса.

Добавляем цифры

Метод sender() возвращает Qt объект, который посылает сигнал.

В нашем случае сигнал является нажатием кнопки. Создадим кортеж с именами кнопок-цифр.

По дефолту в поле всегда стоит 0. В этом случае, если нажимается кнопка с цифрой, текст поля заменяется на эту цифру. Получается, что при нажатии на 0 ничего не будет происходить.

Если же в поле не 0 , то просто добавляем текст нажатой цифры в строку поля.

Полный код метода добавления цифры

Теперь нужно соединить нажатия кнопок с этим методом. Напишем в конструкторе класса.

Изначально был такой код. Но зачем передавать цифру-аргумент, если можно взять её из кнопки?

Соединения кнопок с методом

Посмотрим на результат.

Если вам режет глаз выход цифр за границы поля, потерпите. Мы решим эту проблему в следующей статье.

Очищаем Line Edit и Label

Сделаем такой же метод для очистки только поля.

Добавляем точку

Почему вообще точка, а не запятая? Просто число с точкой можно сразу конвертировать в вещественное число, а с запятой придется еще менять знак. Да, мне лень.

Логика проста. Если точки нет в поле, значит добавляем.

Соеди что? Правильно, няем.

Добавляем временное выражение

Что вообще оно из себя представляет? Есть два типа временных выражений:

1) Число и математический знак. Грубо говоря, это память калькулятора.

Для начала нам нужно убедиться, что в лейбле нет текста. Затем ставим во временное выражение число из поля ввода + текст кнопки btn.

Еще нужно очистить поле ввода. Полный код метода:

Прикрутим пока одну кнопку сложения для теста.

Точка и незначащие конечные нули не обрезаются.

Убираем незначащие конечные нули

Сделаем статический метод для решения этой проблемы. Передавать в функцию мы будем string число, получать то же самое.

Введем переменную n, которая приводит аргумент сначала к типу float, потом к string.

Приведение к float обрезает нули, но не все. В конце остается .0 . Мы будем возвращать срез строки без двух последних символов, если они равны .0 , иначе будем возвращать просто n.

Полный код метода:

Теперь добавим обрезку незначащих нулей в метод добавления временного выражения:

Старый код с передачей знака-аргумента

Получаем число из Line Edit

Запишем в переменную текст поля, уберем потенциальную точку с помощью strip().

Возвращаем float, если точка есть в переменной, иначе возвращаем int, то есть целое число.

Добавим type hint к методу. Он может возвращать только целое или вещественное число. Для этого импортируем:

Optional используем позже.

В Python 3.10 не нужно ничего импортировать.

Можно просто написать

Получаем число из Label

Если в лейбле есть текст, получаем его, разделяем по пробелам и берем первый элемент, то есть число.

Type hint здесь — Union[int, float, None].

Получаем знак из Label

Чтобы получить знак, нам нужно удостовериться в наличии текста в лейбле, затем получить текст из него, разделить по пробелам и вытащить последний элемент.

Type hint здесь — Optional[str]. Это означает, что метод может вернуть либо строку, либо ничего. Как Union[str, None], только компактнее и читабельнее.

Вычисляем выражение

Так, калькулятор же считать должен, я правильно понимаю? Ну тогда импортируем сложение, вычитание, умножение и деление из стандартной библиотеки operator.

Теперь создадим словарь с операциями. Каждому знаку присвоим его логическую функцию.

Создадим метод вычисления.

Если в лейбле есть текст, вводим переменную результата. Обрезаем конечные нули, приводим к строке. Берем операцию из словаря по знаку, в скобках указываем с какими числами провести операцию. Заметьте, что порядок передачи аргументов важен для деления и вычитания. Сначала мы передаем число из временного выражения, а потом из поля ввода.

Добавляем в лейбл число из поля ввода и знак =

Ставим результат в поле ввода и возвращаем его.

Type hint — Optional[str].

Полный код метода вычисления

Метод математической операции

Если в лейбле нет выражения, мы его добавляем, удивительно.

Если выражение есть, берем знак. Если он не равен знаку нажатой кнопки, то есть два случая. Первый — это равенство. В этом случае просто добавляем временное выражение. Иначе меняем знак выражения на знак нажатой кнопки.

Если же знак равен знаку нажатой кнопки, то мы считаем выражение и добавляем в конец лейбла этот знак.

Полный код математической операции

Полный код математической операции

Старый код метода вычисления со знаком-аргументом

Помолимся за здравие Гвидо Ван Россума и запустим программу.

Почему-то не хочет дальше считать с равенством. А я вам расскажу почему. В методе добавления временного выражения нужно добавить дополнительное условие. В итоге получится «если временного выражения нет или есть равенство».

И вот еще покажу, как меняется знак, если вы постоянно промахиваетесь по кнопке.

Заключение

Штош, в следующей статье допишем калькулятор. Сделаем отрицание, backspace, несколько шорткатов для одной кнопки и обработаем ошибки. До встречи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *