Как убрать все нули из целого числа?
Мне кажется, гораздо интереснее решать данную задачу без использования строк:
n, i, res = 100403, 0, 0 while n > 9: n, mod = divmod(n, 10) if mod > 0: res += mod * 10**i i += 1 res += n * 10**i
Отслеживать
51.6k 200 200 золотых знаков 61 61 серебряный знак 242 242 бронзовых знака
ответ дан 6 авг 2020 в 9:55
MaxU — stand with Ukraine MaxU — stand with Ukraine
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
25. Работаем со списками в Python (удалять лучше с конца)
Продолжаем работать со списками.
Разберем задания, которые (должны) были вызвать у вас трудности. Напомню, что в данный момент мы работаем с числовыми списками.
Для создания списка, заполненного случайными значениями, удобно использовать такой прием:
a = [rnd(10) for x in range(15)] print(a)
А теперь попробуем удалить все нули. Вариант с использованием count и remove мы рассматривать не будем, надеюсь с ним все понятно. Предположим, что этих функций нет, или мы не можем их использовать. Чтобы удалить все нули нужно, во-первых, перебирать список по номерам, а не по значениям, т.е. использовать цикл вида:
for i in range(len(a)): print(a[i])
Сравним с циклом, который перебирает по значениям:
for x in a: print(x)
Второй способ короче, элегантнее и понятнее. Но он не всегда может быть использован. Есть особенности, с которыми мы разберемся чуть позже, пока вам придется поверить, что оба варианта имею право на существование и понимать и использовать нужно оба варианта перебора. Если вам нужна позиция (номер) элемента, если вам нужно сравнивать с соседними, то подходит только перебор по номерам.
Это было «во-первых». «Во-вторых» видим проблему:
for i in range(len(a)): if a[i] == 0: a.pop(i)
Такой вариант приводит к возникновению ошибки out of range. Запомните и ошибку и причину ее вызывшую. Это выход за пределы списка. Разберем подробнее, что происходит при выполнении: for i in range(12)?
Создается последовательность (0,1,2,3,4,5,6,7,8,9,10,11) и i начинает брать значения из этой последовательности по-очереди. Никакого изменения этой последовательности не предусмотрено! Т.е. после удаления элементов последовательность номеров оказывается длинее, чем последовательность элементов!
И это неизбежно приводит к тому, что вы пытаетесь обратится к элементу, которого не существует.
Попробуем использовать цикл while:
i = 0 while i < len(a): if a[i] == 0: a.pop(i) i += 1
Теперь выхода за пределы списка не будет. Правда нули удаляются не все, но от одной ошибки мы уже избавились. Посмотрим, почему нули удаляются не все, допустим, у вас есть список:
1 0 0 2 3 4
Тогда программа отработает так:
i 1 0 0 2 3 4 (не ноль) i 1 0 0 2 3 4 (ноль, удалить и перейти дальше!) i 1 0 2 3 4
После удаления нуля, следующий элемент «подтягивается» на это место. Нельзя уходить, надо снова проверять.
i = 0 while i < len(a): if a[i] == 0: a.pop(i) else: i += 1
Теперь будет работать нормально, потому что переход на следующую позицию мы делаем только тогда, когда не удаляли. Если удаляли, то проверяем, что там «приползло».
Это хороший способ, но есть лучше!
Попробуйте пройти циклом for c конца!
for i in range(len(a)-1,-1,-1): if a[i] == 0: a.pop(i)
Разве это не прекрасно?
Длина списка изменяется, элементы перемещаются, но это уже не наша проблема!
Есть способ и еще проще:
a = [x for x in a if x != 0]
Или его явная разновидность:
b = [] for x in a: if x != 0: b += [x] a = b print(a)
У всех способов есть свои особенности. Поэтому проще всего знать и понимать все.
1. Удалить все элементы, равные нулю
2. Удалить все отрицательные
3. Удалить все элементы, которые больше 5
4*. Удалить все элементы, которые меньше своих обоих соседей
А еще попробуйте вернуться к заданиям двух предыдущих уроков и выполнить их.
На следующем уроке мы еще поработаем с числовым списком, чтобы через урок вернуться к «кружочкам». Нам предстоит искать самые большие, самые маленькие и работать с соседями (элементов).
Удачи, жду вопросов в комментариях (в «обычных», т.к. уведомление приходит только о них)
Убрать нули из числа
Добрый день! Имею такое задание: вводится число, например 1134560809. Натуральное. Нужно убрать все нули из числа и на выходе получить 11345689. Как это сделать?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Убрать лишние нули
Нужно перевести число -999.9999 в -1,000, -1234567.0001236 в -1,234,567. А получается -1,000.0 и.
Убрать нули спереди числа!
Всем привет такая проблемка есть число например 060 или 004 или 230 нужно проверять если у него.
Убрать нули в десятичной части числа
При конвертировании строки в число остаются нули в десятичной части. Как их убрать? string sd =.
Убрать из ListBox все числа, содержащие нули
limit = количество элементов в ListBox1 ListBox1 содержит миллион чисел от 1 до 1000000.
Как убрать незначащие нули из вещественного числа?
Помогите пожалуйста! Есть число double value == 12 650 320. 250 000 Как убрать 0 после.
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
num = 1134560809 print(int(str(num).replace('0','')))
Регистрация: 29.04.2020
Сообщений: 34
огромное спасибо!
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
1 2 3 4 5 6 7 8 9 10
n = 1134560809 lst = [] while n: n, y = divmod(n, 10) if y != 0: lst.append(y) res = 0 for i, v in enumerate(lst): res += v * 10**(i) print(res)
Регистрация: 29.04.2020
Сообщений: 34
а можно ли это сделать через условный оператор? или через while, for?
Добавлено через 32 секунды
Спасибо!
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
Без списка
1 2 3 4 5 6 7 8 9
n = 1134560809 cnt = 0 res = 0 while n: n, y = divmod(n, 10) if y != 0: res += y * 10**cnt cnt += 1 print(res)
35345 / 19945 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
Сообщение было отмечено newtmasglee как решение
Решение
1 2 3 4 5 6 7 8 9
n = 1134560809 cnt = 1 res = 0 while n: n, y = divmod(n, 10) if y != 0: res += y * cnt cnt *= 10 print(res)
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Убрать нули при разделении массива на положительные и отрицательные числа
Дан массив A размера N. Сформировать два новых массива B и C: в массив B записать все положительные.
Как убрать нули в начале числа с шестнадцатеричной системой счисления
Как убрать в начале чисел нули в Ф.А.? И возможно ли как-то напрямую вычислять значения в 16ной.
Убрать из текста нули
Доброе утро, прошу помощи с работой над текстом. Дан текстовый файл, в котором нужно из всех чисел.
Как убрать нули
Есть массив, вывожу задом-наперед, так как не знаю сколько именно чисел введет пользователь - делаю.
Убрать нули из матрицы
дана матрица и нужно рассчитать логарифм этой матрицы. но в матрице есть нули. можно ли как то.
Убрать нули из массива
Есть массив мне нужно убрать нули из массива т.е. уменьшить размерность массива. Подскажите, как.
Как перенести все нули в списке в конец?
Здравствуйте. Решаю задачи на CodeWars и сейчас такая задача:
"Написать алгоритм который берет список и перемещает все нули в конец, сохраняя порядок других элементов."
Я решил сделать это таким образом:
def move_zeros(array): result = [] zeros = [] for x in array: if (type(x) is int or type(x) is float) and x == 0: zeros.append(x) continue result.append(x) result.extend(zeros) return result
Сейчас читаю учебник и увидел list comprehension и думаю что с ним будет лучше и больше похоже на алгоритм. Попробовал сделать так:
def move_zeros(array): x = [x for x in array if (type(x) is int or type(x) is float) and x != 0] y = [x for x in array if (type(x) is int or type(x) is float) and x == 0] return x + y
По получается тогда дублирование. Как можно без дублирования в один list comprehensions вставить этот алгоритм?
- Вопрос задан более года назад
- 765 просмотров
3 комментария
Простой 3 комментария