Форум сайта python.su
Дан список целых чисел. Требуется “сжать” его, переместив все ненулевые элементы в левую часть списка, не меняя их порядок, а все нули - в правую часть. Порядок ненулевых элементов изменять нельзя, дополнительный список использовать нельзя, задачу нужно выполнить за один проход по списку. Распечатайте полученный список.
Входные данные:
Вводится список чисел. Все числа списка находятся на одной строке.
Выходные данные:
Выведите ответ на задачу.
Мой код:
s = list(map(int,input().split())) for i in range(len(s)-1, -1, -1): if s[i] == 0: s.append(s.pop(i)) print(*s)
Офлайн
Fiares_CurieНе знаю.
Почему так?
Офлайн
Fiares_CurieВот это признак того, что список может быть бесконечным. На практике это значит, например, что данные списка приходят с какого-то датчика непрерывно и бесконечно и их надо обрабатывать на лету. Оттуда и один проход. Так что, я думаю, они сделали в тестах защиту от вычисления длины списка. Не можешь ты вычислить длину бесконечного списка, повиснет функция вычисления длины. Ну, как бы в теории так, в питоне-то длина списка постоянно перевычисляется при любом изменении списка и хранится в служебном поле (но это неточно). Но по теории, вычисление длины списка имеет временную сложность O(n). Так что надо от этого избавиться.
задачу нужно выполнить за один проход по списку
Отредактировано py.user.next (Окт. 13, 2021 22:47:37)
Офлайн