@ovitebs

Как перенести все нули в списке в конец?

Здравствуйте. Решаю задачи на 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 вставить этот алгоритм?
  • Вопрос задан
  • 916 просмотров
Решения вопроса 3
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Не уверен, что вообще можно реализовать одним генератором списков, но если хочется именно так, то можно сильно упростить:
def move_zeros(array):
    return [x for x in array if x] + [0]*array.count(0)
Ответ написан
seven5674
@seven5674
Старый я уже что бы что-то в себе менять
a1 = [6, 3, 0, 0, 0, 4, 8]
a2 = sorted(a1, key=lambda x: not x)

[6, 3, 0, 0, 0, 4, 8]
[6, 3, 4, 8, 0, 0, 0]
Ответ написан
@mkone112
Начинающий питонист.
l = [6, 3, 0, 0, 0, 4, 8]
l.sort(key=bool, reverse=True)

[6, 3, 4, 8, 0, 0, 0]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы